2
我努力将python2.6脚本的标准输出保存到文件中,当我将它作为新贵的作业运行时。在暴发的作业中从python捕获标准输出
这是我目前的测试脚本:
#!/usr/bin/python
from time import sleep
import sys
while 1:
print "Hello from stdout"
print >> sys.stderr, "Hello from stderr"
sleep(1)
如果我这样做$ myscript >> /var/log/myscript
工作正常。我看到两者。
然而,作为新贵的脚本,如果我用下面的conf
/etc/init/myscript.conf:
exec /path/to/myscript >> /var/log/myscript 2>&1
我看到这一点:
Hello from stderr Hello from stderr Hello from stderr Hello from stderr Hello from stderr Hello from stderr
如果我使用不同的stderr和stdout文件,它们都创建,但标准输出始终为空。
我在做什么错?
我认为这可能是一个缓冲问题。我曾假设当python收到一个SIGTERM时,它会自己刷新stdout。 我想一个潜在的解决方案是捕获SIGTERM并刷新缓冲区。 – rod
是的,用flush()处理sigterm会得到你想要的。一个TERM如果没有处理将终止该程序,但有趣的想法是让默认处理程序刷新所有IO ... – koblas