Python多久刷新一次文件?
Python多久会刷新到stdout?
关于(1)我不确定 .
至于(2),我相信Python在每一行之后都会刷新到stdout . 但是,如果你将stdout重载为一个文件,它是否经常刷新?
您还可以通过从io模块调用只读DEFAULT_BUFFER_SIZE属性来检查默认缓冲区大小 .
import io print (io.DEFAULT_BUFFER_SIZE)
对于文件操作,Python使用操作系统的默认缓冲,除非您另行配置 . 您可以指定缓冲区大小,未缓冲或行缓冲 .
例如,open函数采用缓冲区大小参数 .
http://docs.python.org/library/functions.html#open
“可选的缓冲参数指定文件所需的缓冲区大小:”
0表示无缓冲,
1表示行缓冲,
任何其他正值意味着使用(大约)该大小的缓冲区 .
负缓冲意味着使用系统默认值,通常为tty设备进行行缓冲,并为其他文件进行完全缓冲 .
如果省略,则使用系统默认值 .
码:
bufsize = 0 f = open('file.txt', 'w', buffering=bufsize)
您还可以使用flush()方法以编程方式强制将缓冲区刷新到文件 .
with open('out.log', 'w+') as f: f.write('output is ') # some work s = 'OK.' f.write(s) f.write('\n') f.flush() # some other work f.write('done\n') f.flush()
我在使用 tail -f 拖尾输出文件时发现这很有用 .
tail -f
我不知道这是否也适用于python,但我认为这取决于您运行的操作系统 .
例如,在Linux上,输出到终端会刷新换行符上的缓冲区,而对于输出到文件,它只会在缓冲区已满时刷新(默认情况下) . 这是因为刷新缓冲区的次数更少,并且用户不太可能注意到输出是否未在文件中的换行符上刷新 .
如果您需要,您可以自动刷新输出 .
编辑:我认为你会以这种方式自动刷新python(基于here)
#0 means there is no buffer, so all output #will be auto-flushed fsock = open('out.log', 'w', 0) sys.stdout = fsock #do whatever fsock.close()
这是另一种方法,直到OP选择他喜欢哪一种 .
在任何其他代码之前在 __init__ .py文件中包含以下代码时,使用 print 打印的消息和任何错误将不再记录到Ableton的Log.txt中,而是记录到磁盘上的单独文件:
__init__
print
import sys path = "/Users/#username#" errorLog = open(path + "/stderr.txt", "w", 1) errorLog.write("---Starting Error Log---\n") sys.stderr = errorLog stdoutLog = open(path + "/stdout.txt", "w", 1) stdoutLog.write("---Starting Standard Out Log---\n") sys.stdout = stdoutLog
(对于Mac,将 #username# 更改为用户文件夹的名称 . 在Windows上,用户文件夹的路径将采用不同的格式)
#username#
当您在文件编辑器中打开文件时,当磁盘上的文件发生更改时刷新其内容(例如Mac:TextEdit没有,但TextWrangler没有),您将看到日志正在实时更新 .
致谢:此代码主要是由Nathan Ramella的liveAPI控制界面脚本复制而来
5 回答
您还可以通过从io模块调用只读DEFAULT_BUFFER_SIZE属性来检查默认缓冲区大小 .
对于文件操作,Python使用操作系统的默认缓冲,除非您另行配置 . 您可以指定缓冲区大小,未缓冲或行缓冲 .
例如,open函数采用缓冲区大小参数 .
http://docs.python.org/library/functions.html#open
“可选的缓冲参数指定文件所需的缓冲区大小:”
0表示无缓冲,
1表示行缓冲,
任何其他正值意味着使用(大约)该大小的缓冲区 .
负缓冲意味着使用系统默认值,通常为tty设备进行行缓冲,并为其他文件进行完全缓冲 .
如果省略,则使用系统默认值 .
码:
您还可以使用flush()方法以编程方式强制将缓冲区刷新到文件 .
我在使用
tail -f
拖尾输出文件时发现这很有用 .我不知道这是否也适用于python,但我认为这取决于您运行的操作系统 .
例如,在Linux上,输出到终端会刷新换行符上的缓冲区,而对于输出到文件,它只会在缓冲区已满时刷新(默认情况下) . 这是因为刷新缓冲区的次数更少,并且用户不太可能注意到输出是否未在文件中的换行符上刷新 .
如果您需要,您可以自动刷新输出 .
编辑:我认为你会以这种方式自动刷新python(基于here)
这是另一种方法,直到OP选择他喜欢哪一种 .
在任何其他代码之前在
__init__
.py文件中包含以下代码时,使用print
打印的消息和任何错误将不再记录到Ableton的Log.txt中,而是记录到磁盘上的单独文件:(对于Mac,将
#username#
更改为用户文件夹的名称 . 在Windows上,用户文件夹的路径将采用不同的格式)当您在文件编辑器中打开文件时,当磁盘上的文件发生更改时刷新其内容(例如Mac:TextEdit没有,但TextWrangler没有),您将看到日志正在实时更新 .
致谢:此代码主要是由Nathan Ramella的liveAPI控制界面脚本复制而来