使用文件作为子进程的标准输入和标准输出

Posted

技术标签:

【中文标题】使用文件作为子进程的标准输入和标准输出【英文标题】:Using files as stdin and stdout for subprocess 【发布时间】:2013-02-16 12:53:03 【问题描述】:

如何使用 python 子进程模块复制以下批处理命令?

myprogram < myinput.in > myoutput.out

换句话说,如何使用myinput.in 的内容作为标准输入和myoutput.out 作为标准输出来运行myprogram

【问题讨论】:

【参考方案1】:

以下应该有效:

myinput = open('myinput.in')
myoutput = open('myoutput.out', 'w')
p = subprocess.Popen('myprogram.exe', stdin=myinput, stdout=myoutput)
p.wait()
myoutput.flush()

【讨论】:

这看起来很接近我的需要。如何检测是否发生错误? 没关系。 stderr=subprocess.PIPE,那么,如果 stderr: 打印错误 myoutput = open('myoutput.out'. 'w') 行中的参数应该用, 分隔,而不是. 虽然这个答案仍然正确,但请注意 Python 3.5 中添加的 subprocess.run() 对于大多数 subprocess 用例来说是一个更好的 API。它同样采用 stdinstdout 关键字参数。

以上是关于使用文件作为子进程的标准输入和标准输出的主要内容,如果未能解决你的问题,请参考以下文章

使用带有标准输入和标准输出重定向的 2 进程管道时如何避免标准输入上的重复输入

从提升的子进程获取错误和标准输出

关于标准输入,标准输出,标准错误

在进程通信中管道作为标准输入/标准输出。

Python子进程将数据定向到标准输入

Python:如何写入子进程的标准输入并实时读取其输出