Python子进程:在过程终止后获取所有标准输出数据

时间:2018-10-18 17:16:24

标签: python subprocess pipe

我正在python中使用子进程来调用另一个可执行文件,向其stdin中写入一些数据(一旦写入所有内容,就关闭流-这是子进程知道其已接收所有内容的方式),然后在接收到所有stdout数据之后已终止-将在一段时间后终止。

使用伪代码:

  • 打开子流程
  • 写入标准输出
  • 让程序完成
  • 检索吐出到stdout的所有内容

我尝试了以下方法:

import subprocess
p = subprocess.Popen([cmd], 
stdout=subprocess.PIPE,stdin=subprocess.PIPE)
p.stdin.write(str(data))
p.stdin.close()
p.wait()
result = p.communicate()[0]

但是我得到以下堆栈跟踪:

    result = p.communicate()[0]
  File "/usr/lib64/python2.7/subprocess.py", line 800, in communicate .
    return self._communicate(input)
  File "/usr/lib64/python2.7/subprocess.py", line 1396, in _communicate
    self.stdin.flush()
  ValueError: I/O operation on closed file

请告知

1 个答案:

答案 0 :(得分:1)

使用communicate

import subprocess
p = subprocess.Popen([cmd], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
result = p.communicate(data)[0]