我有创建一个控制面板来监控多个脚本和进程的想法。事先构建了界面,我似乎很难检测子进程命令的状态,在子进程启动时获取一个锁定的控制面板。
有一些方法,如subprocess.communicate()
或subprocess.wait()
,以确定一个进程是否存活/完成,但那些锁定控制面板的过程为子进程的生命周期。如此块中所示。 if clausule永远不会到达。
htop = subprocess.Popen(["xterm", "-e", "htop"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = htop.communicate():
if output:
print("Succeeded!")
else:
print("status unknown")
如何在不锁定控制面板的情况下控制和监控新流程?
我们的想法是,该小组能够启动/停止服务器,并报告其状态:
HTTP server status: running
DHCP server status: stopped
[1] start HTTP server
[2] start DHCP server
[0] stop all servers
此时,可以通过按[1]启动子进程并查看是否可以。但是,使用不同的if语句[0]终止相同的子进程是不可能的。
使用p.poll()
或者,如果你需要检查输出,请在subprocess.PIPE
上使用select()
作为stdout和p.stdout
。
我已经找到了如何通过使流程变量成为全局变量来通过两个if语句来控制子流程。
结果,代码如下(粗略草图):
if command == "run":
global htop
htop = subprocess.Popen(["xterm", "-e", "htop"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
if htop.poll() == None:
htopStatus = "Running"
if command == "stop":
if htop.poll() == None:
htop.terminate()
htopStatus = "Stopped"