我有一个简单的Python脚本,我想在后台运行,输出重定向到一个文件,例如。
./test.py > output.log 2>&1 &
只要我的Python脚本中没有sleep
语句,这就可以正常工作:
#! /usr/bin/env python
import sys
import time
from time import gmtime, strftime
urls=['http://a', 'http://b','http://c', 'http://d', 'http://e' ]
def main():
while True:
for url in urls:
try:
print url
except Exception, e:
print "Error checking url " + url
print e
#time.sleep(60)
if __name__ == '__main__':
main()
如果取消注释sleep语句,则在后台运行脚本时不会生成任何输出。
如果它在前台运行它可以正常工作(带睡眠),输出会按照我的选择发送到控制台或文件。
e.g。这总是有效:
./test.py > output.log
我的问题是,当脚本在后台运行时,为什么让sleep语句阻止输出被定向到文件,我该如何绕过它呢?
答案 0 :(得分:3)
输出不会丢失,只需要很长时间才能到达文件。这与缓冲有关:使用sleep
输出缓冲区需要很长时间才能累积足够的数据来刷新。
如果您在致电sys.stdout.flush()
之前致电sleep()
,则会立即显示输出:
sys.stdout.flush()
time.sleep(60)
答案 1 :(得分:1)
我还没有尝试,但您可以在发送脚本进入睡眠状态之前尝试使用sys.stdout.flush()
。