使用日志输出在后台运行python子流程

使用日志输出在后台运行python子流程,python,subprocess,Python,Subprocess,首先:是的,我已经检查了子流程的文档。我没能找到解决问题的办法,这就是我现在在这里发帖的原因 我的代码: import os import subprocess import shlex processname = '/usr/bin/python3.5 /usr/bin/asphalt run config.yml' print("checking") def proc_check(command): for line in os.popen("ps xwa"):

首先:是的,我已经检查了子流程的文档。我没能找到解决问题的办法,这就是我现在在这里发帖的原因

我的代码:

import os
import subprocess
import shlex

processname = '/usr/bin/python3.5 /usr/bin/asphalt run config.yml'

print("checking")
def proc_check(command):
    for line in os.popen("ps xwa"):
        fields = line.split()
        pid = fields[0]
        process = fields[4]

        if len(fields) == 8:
            process = fields[4] + " " + fields[5] + " " + fields [6] + " " + fields[7]

        if command == process:
            # Kill the Process. Change signal.SIGHUP to signal.SIGKILL if you like
            os.kill(int(pid), signal.SIGKILL)

            # Do something else here
            print("Killed Process")
            print(pid)
            print(process)
            return True
    return False

if proc_check(processname):
    print("all good")
else:
    with open('apiServer.log', 'w') as apiLog:
        with open('apiServer.err', 'w') as errLog:
            command = "cd /root/ProjectAthena/APIServer/" \
                      "&& . ./venv/bin/activate " \
                      "&& PYTHONPATH=. asphalt run /root/ProjectAthena/APIServer/config.yml"
            ApiHelp = subprocess.Popen(command, stderr=errLog,stdout=apiLog, shell=True)
            print("subprocces spawned!")
            ApiHelp.communicate()                    
我想运行一台服务器,为另一个程序提供API。由于服务器必须一直运行(输出到文件),我使用了一个函数来检查我的服务器是否已经在运行

如果是:什么也不做。 如果不是:启动它。 我的控制台告诉我该进程已启动,但遗憾的是,它无法工作或显示为
ps aux

我在阅读现有问题时遇到的问题是,我的程序始终在运行,因此没有EOF可供收听。我尝试过的其他方法都阻止了我的进程

也许我需要使用线程(?)。可悲的是,我不是那么熟悉的线程,所以任何剪断将是可怕的

非常感谢您的帮助

谢谢


marvin/Nop0x

为什么你不能使用cronjob?你能结束你的后台任务吗?获取数据并重新运行它吗?所以你得到了EOFAbdulRazak——我想把我的程序作为一个包来部署,这就是为什么我想在它里面运行服务器@什么问题我不能结束后台任务,因为我的主程序需要一直运行。请检查这个问题的答案。它可能会回答你的问题。