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

标签 python subprocess

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

有诸如 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/

相关文章:

python - python中奇点的数值积分(主值)

python - 确定 python 子进程段错误

python - 如何使用 boto3 以文件系统样式检索存储桶前缀

python - 避免用户中止 python 子进程

python - 后续子进程调用未保存环境变量 (Python)

python - 在 Windows 中使用子进程 Popen.send_signal(CTRL_C_EVENT) 时如何达到预期的结果?

python - 为什么不在 Python 的 subprocess.Popen 中使用 `shell=True`?

python - WSGI 作为 AuthFormProvider

python - 使用 ffmpeg 从 yuv 到 rgb 的错误转换视频

python - 使用条件更改列值或附加新行的数据框更新 SQLite DB