首先关闭:是的,我已经检查了子进程的文档。我无法为我的问题找到解决方案,这就是为什么我现在在这里发帖。
我的代码:
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