python多久刷新一次文件?

  1. Python刷新文件的频率如何?
  2. Python刷新到stdout的频率如何?

我不确定(1)。

至于(2),我相信Python在每一个新行之后都会刷新到stdout。 但是,如果你将stdout重载到一个文件,它是否经常刷新?

对于文件操作,Python使用操作系统的默认缓冲,除非您configuration它。 您可以指定缓冲区大小,无缓冲区或行缓冲区。

例如,open函数需要一个缓冲区大小参数。

http://docs.python.org/library/functions.html#open

“可选的缓冲参数指定文件所需的缓冲区大小: 0表示无缓冲,1表示缓冲区行,1表示缓冲区行,其他正值意味着使用缓冲区大小(大约),负缓冲表示使用系统默认值,通常是行缓冲为tty设备,完全缓冲其他文件,如果省略,则使用系统默认值。

bufsize = 0 f = open('file.txt', 'w', 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尾随输出文件。

我不知道这是否也适用于python,但我认为这取决于您正在运行的操作系统。

例如,在Linux上,输出到terminal刷新一个换行符的缓冲区,而输出到文件,只有当缓冲区满(默认)时才刷新。 这是因为刷新缓冲区的次数更less,并且用户不太可能注意到输出是否在文件的换行符上不被刷新。

如果这是你所需要的,你可能会自动刷新输出。

编辑:我想你会自动刷新在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) 

这是另一种方法,由OPselect他喜欢哪一个。

当在任何其他代码之前在__init__ .py文件中包含以下代码时,使用print和任何错误print消息将不会再logging到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上,用户文件夹的path将具有不同的格式)

在文件编辑器中打开文件时,当磁盘上的文件发生更改时(例如Mac:TextEdit不支持TextWrangler),可以实时更新日志。

积分:这个代码主要是由Nathan Ramella的liveAPI控制表面脚本复制的