Python打印到stdout在集群作业失败时丢失
我有一段Python代码,正在一个计算机集群上运行。当代码出错(或者被取消等)时,默认的输出(也就是通过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 个回答
1
好的,print
这个命令会把内容输出到一个叫做 sys.stdout 的地方,这个地方其实是一个 文件对象。你可以在这个文件对象上使用 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()