Python:为什么print语句和subprocess.call()输出不同步?

时间:2012-04-20 21:20:09

标签: python linux subprocess

我正在运行以下代码(称之为batch.py​​)

for config in keystoneConfig: 
    cmdlist = generate_cmd_list(config)
    print ' '.join(cmdlist)
    subprocess.call(cmdlist)

将batch.py​​的输出重定向到另一个文件。即

  

./ batch.py​​> output.txt的

但我意识到subprocess.call()的所有输出都在print语句之前。为什么输出不同步?

2 个答案:

答案 0 :(得分:10)

Python是块缓冲自己的输出而不是在subprocess.call()之前刷新它,因为你将其输出重定向到文件而不是控制台;你需要强制行缓冲或禁用缓冲,或者在子进程调用之前手动刷新。

答案 1 :(得分:2)

在打印之后和进行子进程调用之前用 sys.stdout.flush() 刷新。