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

问题描述:

我运行下面的一段代码(称之为batch.py​​)Python:为什么print语句和subprocess.call()输出不同步?

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

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

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

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

由于您将其输出重定向到文件而不是控制台,因此Python会阻止其自己的输出,并且不会在subprocess.call()之前对其进行刷新,您需要强制行缓冲或禁用缓冲,或在子流程调用之前手动刷新。

+0

如何“刷新”打印语句? – CodeNoob 2012-04-20 21:25:00

+5

'sys.stdout.flush()' – Fenikso 2012-04-20 21:26:10