如何打印子流程' stdout直接发送到文件

时间:2014-03-25 16:47:52

标签: python python-2.7 subprocess popen

如何强制subprocess.Popen / os.Popen直接将大输出写入文件,而不在缓冲区中保存任何内容? 我试过这个:

os.popen(cmd, bufsize=0)
它没有任何帮助。 读取所有输出(同样,大输出)并将其保存到文件/列表的任何解决方案都会有所帮助。

2 个答案:

答案 0 :(得分:2)

这是将stdout重定向到文件的方法:

import sys
sys.stdout = open('your_file', 'w')

然后shell中输出的所有内容都会被转储到该文件中。

答案 1 :(得分:2)

您可以使用stdout参数将输出从子进程重定向到文件:

import shlex
from subprocess import check_call

with open('outputfilename', 'wb', 0) as outputfile:
    check_call(shlex.split(cmd), stdout=outputfile)
  

你知道我应该在命令中添加什么来阻止子进程将警告/错误打印到shell吗?

只需设置stderr=subprocess.STDOUT即可合并stdout / stderr。或者将stderr重定向到os.devnull以丢弃输出。

相关问题