为什么subprocess stdout到文件是按顺序写的?

时间:2013-04-10 16:34:41

标签: python subprocess redirect

我有一个调用可执行文件的python脚本。可执行文件的输出被重定向到日志文件以及有关其被调用时间的一些信息。例如,使用python -V作为可执行文件来说明:

import time, subprocess
with open('./LOGFILE.txt', 'a') as F:
    F.write('******\n')
    F.write('Events on %s :\n'%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    EXE_output = subprocess.call(['python', '-V'], stdout=F, stderr=F)

文件LOGFILE.txt的输出是:

Python 2.7.3
******
Events on 2013-04-10 19:27:25 :

我期待的地方如下:

******
Events on 2013-04-10 19:27:25 :
Python 2.7.3

我在打开的日志文件中写了******和时间信息,然后运行子进程并将其输出和错误重定向到文件中。为什么这样订购?我该如何重新排序?

1 个答案:

答案 0 :(得分:8)

在运行子进程之前,应该调用F.flush()。原因是子进程在完成时会刷新缓冲区,而不是。