为什么子标准输出到一个文件中写入坏了?(Why subprocess stdout to a fil

2019-08-21 09:57发布

我有一个调用可执行文件的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

我写的******运行的子进程和它的输出和错误重定向到文件之前和时间信息,在打开的日志文件。 为什么订购这样呢? 我怎么才能重新排序?

Answer 1:

运行子进程之前,您应该调用F.flush()。 这样做的原因是,子进程将刷新缓冲区当它完成,而你不是。



文章来源: Why subprocess stdout to a file is written out of order?