Python和Subprocess - 监控进程而不锁定

问题描述 投票:2回答:2

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

有一些方法,如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]终止相同的子进程是不可能的。

python subprocess
2个回答
2
投票

使用p.poll()或者,如果你需要检查输出,请在subprocess.PIPE上使用select()作为stdout和p.stdout


0
投票

我已经找到了如何通过使流程变量成为全局变量来通过两个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"
© www.soinside.com 2019 - 2024. All rights reserved.