【发布时间】:2018-08-02 18:27:50
【问题描述】:
我正在使用“Popen”运行一个子进程。我需要阻塞直到这个子进程完成,然后读取它的输出。
p = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE, encoding="utf-8")
p.communicate():
output = p.stdout.readline()
print(output)
我收到一个错误
ValueError: I/O operation on closed file.
如何在子进程完成后读取输出,但我不想使用 poll(),因为子进程需要时间,而且无论如何我都需要等待它的完成。
【问题讨论】:
-
p.communicate()返回输出。 -
您不使用
subprocess.run()或旧版subprocess.check_output()的任何特殊原因?如果可以的话,你应该避免使用Popen,因为它很难做到正确。 -
@jasonharper,
p.communicate()返回bound method Popen.communicate of <subprocess.Popen object at 0x105e84e10,而不是子进程代码的输出 -
output, error = p.communicate()应该可以工作,该输出看起来就像您正在打印p.communicate(不带括号)。