python打印到stdout在失败的集群作业上迷路了

时间:2014-04-12 02:59:12

标签: python io output stdout stderr

我有一个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文件中仍然没有。

1 个答案:

答案 0 :(得分:0)

好的,print转到sys.stdout这是file object,您可以使用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()