浏览 4230 次
锁定老帖子 主题:后台运行python程序 遇到缓冲区问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-10
最后修改:2011-01-10
环境:linux
一段执行时间很长的程序(用python做hive客户端执行mapreduce) 在linux后台执行,把结果输出到某文件:
python xxx.py > log.log&
遇到的问题,程序没报错,文件里却什么都没有,没有输入进去。为什么呢? 于是我首先尝试用:
nohup python xxx.py > log.log &
预料之中 还是不行。
于是我做实验:
写了个test.py:
import sys,time from threading import Thread class worker(Thread): def run(self): for x in xrange(0,111): print x time.sleep(1) def run(): worker().start() if __name__ == '__main__': run() 每秒打印一次 我直接用python text.py 执行 没问题 每秒输出一个数 但我在后台执行:
python test.py > log.log&
还是不行。开始不输出 直到程序执行完,一次性的写到log.log文件了。 为什么呢? 原因可能是python 的print 先写到缓冲区了,还没flush到文件。 于是加了一行“ sys.stdout.flush() ” --在每次print后都flush一次。:
import sys,time from threading import Thread class worker(Thread): def run(self): for x in xrange(0,111): print x sys.stdout.flush() time.sleep(1) def run(): worker().start() if __name__ == '__main__': run() 问题解决。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-01
python -u xxx.py > log.log &
|
|
返回顶楼 | |