python - 如何使用 envoy.connect 避免僵尸进程?

标签 python subprocess popen python-envoy

我刚刚发现了“envoy”模块,它是请求创建者制作的 python 子进程的包装器。

我在使用“connect”函数时遇到问题:每次使用它时,都会导致僵尸进程,并且我无法获取 status_code 或结果。

c=envoy.connect("ls -al")
c.status_code == None
 True

如果我执行“ps -ef|grep thepid”,我会得到“已失效”的 pid。

我可以通过执行 os.wait() 或 c._process.wait() 来杀死僵尸,但我无法获得命令的结果(标准输出)...

有什么想法吗?

最佳答案

在您的情况下,您应该使用 run() 方法

正如 Envoy 文档所建议的:

r = envoy.run(cmd)
print r.status_code, r.std_out

但如果您希望命令异步运行,您可以使用 connect() 后跟 block()

一旦调用block(),返回代码就可用。但是 block() 会阻止你的程序,所以逻辑应该是这样。

c1=envoy.connect(cmd1)
c2=envoy.connect(cmd2)
c3=envoy.connect(cmd3)
... more staff ...
c1.block()
print c1.status_code

关于python - 如何使用 envoy.connect 避免僵尸进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329389/

相关文章:

python - 从键盘输入暂停 Python 子进程而不终止子进程

python - 执行绝对路径包含空格的powershell文件

python - 如何在不使用 communicate() 的情况下避免子进程中的死锁

c - 在 epoll 中使用 FILE *

python - 消除 来自 python 字符串

python - 如何在使用 fish 时停用 venv?

python - 艾托夫投影,Python

python - 命令 "pipenv run"昨天工作正常。为什么我今天收到 AttributeError?

不同操作系统上的python ctypes问题

我可以从 popen() 流中打开 bash 吗?