使用通信将子进程的stdout写入文件

时间:2014-10-13 22:45:23

标签: python subprocess stdout communicate

我正在使用子进程来运行可执行文件并使用通信来管理它的输出。最后,我将通信内容写入文件。确切的代码如下所示

run = subprocess.Popen(['executable'], stdout=subprocess.PIPE)
output = run.communicate()[0]
logfile = open('run.log', 'a')
logfile.write(output)
logfile.close()

在上面的过程中,日志文件在运行结束时写入。但是,有可能在可执行文件运行时将输出写入日志吗?

2 个答案:

答案 0 :(得分:2)

你的意思是:

with open("run.log","a") as f:
      run = subprocess.Popen(['executable'], stdout=f)

答案 1 :(得分:0)

我想我找到了解决方法:

logfile = ('run.log', 'w')
run = subprocess.Popen(['executable'], stdout = logfile)
run.wait()
logfile.close()

第一行创建run.log用于写入,stdout在可执行文件运行时直接写入日志文件。 run.wait()等待可执行文件完成,然后关闭日志文件。