Skip to main content
 首页 » 编程设计

Python & Subprocess之在不锁定的情况下监控进程

2024年09月03日37JeffreyZhao

我想创建一个控制面板来监控多个脚本和进程。预先构建界面后,我似乎很难检测子进程命令的状态,在子进程启动时锁定控制面板。

有诸如 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 上。