包含sleep()语句的Python脚本在后台运行时不记录日志
我有一个简单的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语句打开,那么当我在后台运行这个脚本时,就不会生成任何输出。
如果在前台运行,它就没问题(有sleep的情况下),输出会按照我的选择显示在控制台或文件里。
比如,这种情况总是能正常工作:
./test.py > output.log
我想问的是,为什么在后台运行脚本时,加入sleep语句会导致输出无法保存到文件里,我该怎么解决这个问题呢?
2 个回答
1
我还没试过,不过你可以试试在让你的脚本暂停之前,先用 sys.stdout.flush()
这个命令。
4
输出并没有丢失,只是到达文件的时间很长。这跟缓冲有关:因为有了sleep
,输出缓冲区需要很长时间才能积累足够的数据,然后才会被写入文件。
如果你在调用sleep()
之前先调用sys.stdout.flush()
,那么输出就会立刻显示出来:
sys.stdout.flush()
time.sleep(60)