在linux中使用python xxx.py > out.log会出现文件不实时输出,打印的顺序并非期望顺序,原因:存在输出缓存,解决这个问题的办法如下:
- 给python增加-u参数,可控制输出为“无缓冲二进制stdout和stderr”,python --help可查-u的含义,如下:
-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
see man page for details on internal buffering relating to '-u'
- 在写文件中使用.flush()函数
如果python程序中使用了write 向文件中写入数据,避免缓存需要在write之后加入.flush()函数。
说明:python 中使用write,将数据写入到文件中,但是并不是write之后,就立刻写入到文件(比如a.txt)中,python的write会先将数据放在内存的缓冲区中,等到积累了一定的量,再一起写入到磁盘文件中。这样可以提高性能,减少访问磁盘的次数。
1)有缓存,因为缓存不满,见不到打印的1,2,3
f = open('f.txt','w')
f.write('1,2,3')
while(1):
pass
2)关闭缓存,直接输出,可以见到打印的1,2,3
f = open('f.txt','w')
f.write('1,2,3')
f.flush()
while(1):
pass