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

5

我正在运行以下代码(称其为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个回答

10

Python 在输出内容前进行块缓冲,并且在subprocess.call()前不会清空缓存,这是因为您将其输出重定向到文件而不是控制台;您需要强制行缓冲或禁用缓冲,或在子进程调用之前手动清空缓存。


如何“刷新”打印语句? - CuriousMind

3
在打印完成并在调用子进程之前,使用sys.stdout.flush()清除缓冲区。

谢谢。由于某种原因,为print添加flush=True没有起作用,但是这个方法可以。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接