Python多长时间刷新一次文件? Python多长时间刷新一次标准输出?
我对(1)不太确定。
至于(2),我相信Python在每换行后都会刷新到标准输出。但是,如果将stdout重载为文件,它是否经常刷新?
Python多长时间刷新一次文件? Python多长时间刷新一次标准输出?
我对(1)不太确定。
至于(2),我相信Python在每换行后都会刷新到标准输出。但是,如果将stdout重载为文件,它是否经常刷新?
当前回答
你也可以通过调用io模块中只读的DEFAULT_BUFFER_SIZE属性来检查默认缓冲区大小。
import io
print (io.DEFAULT_BUFFER_SIZE)
其他回答
还可以使用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尾随输出文件时,这很有用。
对于文件操作,Python使用操作系统的默认缓冲区,除非你另有配置。您可以指定缓冲区大小、无缓冲或行缓冲。
例如,open函数接受一个缓冲区大小参数。
http://docs.python.org/library/functions.html#open
可选参数buffering指定文件所需的缓冲区大小:
0表示未缓冲, 1表示行缓冲, 任何其他正值意味着使用(大约)该大小的缓冲区。 负缓冲意味着使用系统默认值,对于tty设备通常是行缓冲,对于其他文件通常是完全缓冲。 如果省略,则使用系统默认值。
代码:
bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
这是另一种方法,由OP选择他更喜欢哪一种。
当在__init__.py文件中包含以下代码时,使用print打印的消息和任何错误将不再被记录到Ableton的Log.txt中,而是记录到磁盘上的单独文件中:
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上,您的用户文件夹的路径将有不同的格式)
当您在文本编辑器中打开文件时,当磁盘上的文件被更改时,文本编辑器会刷新其内容(例如Mac: TextEdit不会,但TextWrangler会),您将看到日志正在实时更新。
字幕:这段代码主要是复制自Nathan Ramella的liveAPI控件表面脚本
我不知道这是否也适用于python,但我认为这取决于你正在运行的操作系统。
例如,在Linux上,输出到终端将在换行符上刷新缓冲区,而输出到文件则只在缓冲区满时刷新(默认情况下)。这是因为更少的次数刷新缓冲区更有效,并且用户不太可能注意到文件中的换行符上的输出没有刷新。
如果需要的话,您可以自动刷新输出。
编辑:我认为你会自动刷新python的这种方式(基于 从这里)
#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()
你也可以通过调用io模块中只读的DEFAULT_BUFFER_SIZE属性来检查默认缓冲区大小。
import io
print (io.DEFAULT_BUFFER_SIZE)