我想创建一个控制面板来监控多个脚本和进程。预先构建界面后,我似乎很难检测子进程命令的状态,在子进程启动时锁定控制面板。
有诸如 subprocess.communicate()
或 subprocess.wait()
之类的方法可以确定进程是否处于事件状态/已完成,但这些方法会锁定子进程生命周期的控制面板。如本 block 所示。永远不会到达 if 子句。
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()
在 p.stdout
上。
关于Python & Subprocess - 在不锁定的情况下监控进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55024280/