python - 为什么子进程标准输出到文件的顺序是乱写的?

标签 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

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

最佳答案

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

关于python - 为什么子进程标准输出到文件的顺序是乱写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15931526/

相关文章:

Windows 上的 Python : path as subprocess argument gets modified and generating error

python - 在新的命令窗口中运行python : windows : Subporcess open a . bat文件并运行

python - Python 中子进程 PIPE 的非阻塞读取,一次一个字节

python - argparse:指定可选参数时忽略多个位置参数

authentication - 以 slim 为条件重定向整个组

mysql - 从命令提示符窗口执行 MySql

python - Bash重定向编码错误

python - 从交互式图表中抓取数据

python - 如何强制用户选择至少一个复选按钮

python - 在djangorest框架中使用postman上传图像时出错