我有一个在计算机集群上运行的 python 代码。默认输出(stdout, , 从 print)当代码失败(或被取消等)时会丢失。当我在调用相应的代码部分后立即调用它时,它也不会出现在输出文件中。

错误输出(stderr) 但是,当作业失败时会打印。如果我没记错的话,在 c++ 中你可以 flush 流以确保卡在缓冲区某处的输出实际上被打印出来。有 python 的类似物吗?我如何确保尽快获得此输出?


我的代码的示意图

for it in somerange:
    print "Iteration", it       # This appears much later in stdout
    f = open(filename[it], 'w')
    f.write('stuff')
    f.close                     # file appears when it is closed
    otherStuff()

经过几次迭代后,我将有许多输出文件(来自 filename),但我的中没有输出 stdout 文件。如果函数 otherStuff() 导致崩溃(等),输出 将要 出现在我的 stderr 文件 - 但我的中仍然没有任何内容 stdout 文件。

有帮助吗?

解决方案

可以,然后呢 print系统标准输出 这是一个 文件对象, ,为此您可以使用 flush() 命令。所以正确的答案是添加 flush() 需要时调用,即

import sys
...
for it in somerange:
    print "Iteration", it       # This appears much later in stdout
    sys.stdout.flush()
    f = open(filename[it], 'w')
    f.write('stuff')
    f.close                     # file appears when it is closed
    otherStuff()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top