os.waitpid上显示"无子进程

4 投票
2 回答
8883 浏览
提问于 2025-04-16 21:04

我正在尝试在Ubuntu上用 Popenwaitpid 来模拟 os.system 的行为,但我遇到了问题。

OSError: [Errno 10] No child processes

这是我使用它的方式:

p = Popen(args, stdout = PIPE, stderr = PIPE)
stdout, stderr = p.communicate()
returncode = os.waitpid(p.pid, 0)[1]

我试着从 p.returncode 中获取返回代码,但它总是显示 None,有没有什么办法可以获取返回代码?

2 个回答

2

使用 p.poll() 或者 p.wait()

7

communicate 方法已经在等待子进程结束,并且会自己收集返回代码。所以,当你调用 os.waitpid 时,你实际上是在引用一个已经从操作系统中移除的进程ID。因此,你会看到 "没有子进程" 的错误信息。

你想要的返回代码会在 返回代码 这个字段里,等到 communicate 方法执行完后就能找到。

撰写回答