5

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

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

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

./batch.py​​ > 输出.txt

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

4

2 回答 2

10

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

于 2012-04-20T21:21:50.323 回答
3

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

于 2021-04-01T19:43:07.783 回答