在后台运行python subprocess并输出日志

时间:2017-02-08 11:40:20

标签: 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"):
        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可以收听。我试过的其他一切都阻止了我的过程。

也许我需要使用Threads(?)。可悲的是,我并不熟悉Threads,所以任何剪切都会很棒!

非常感谢任何帮助!

感谢,

马文/ Nop0x

0 个答案:

没有答案