python刷新文件的频率是多少? Python刷新文件的频率是多少 Python多久刷新一次标准输出

python刷新文件的频率是多少? Python刷新文件的频率是多少 Python多久刷新一次标准输出,python,file,flush,Python,File,Flush,我不确定(1) 至于(2),我相信Python在每一行新代码之后都会刷新到标准输出。但是,如果您将stdout重载为文件,它是否也会经常刷新?我不知道这是否也适用于python,但我认为这取决于您正在运行的操作系统 例如,在Linux上,“输出到终端”在换行符上刷新缓冲区,而“输出到文件”仅在缓冲区已满时刷新(默认情况下)。这是因为刷新缓冲区的次数越少,效率越高,并且如果输出没有刷新到文件中的换行符上,用户就越不可能注意到 如果需要的话,您可以自动刷新输出 编辑:我想你会用这种方式自动刷新pyt

我不确定(1)


至于(2),我相信Python在每一行新代码之后都会刷新到标准输出。但是,如果您将stdout重载为文件,它是否也会经常刷新?

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

例如,在Linux上,“输出到终端”在换行符上刷新缓冲区,而“输出到文件”仅在缓冲区已满时刷新(默认情况下)。这是因为刷新缓冲区的次数越少,效率越高,并且如果输出没有刷新到文件中的换行符上,用户就越不可能注意到

如果需要的话,您可以自动刷新输出

编辑:我想你会用这种方式自动刷新python(基于 从)


对于文件操作,Python使用操作系统的默认缓冲,除非您对其进行其他配置。可以指定缓冲区大小、无缓冲区大小或行缓冲区大小

例如,open函数采用缓冲区大小参数

“可选缓冲参数指定文件所需的缓冲区大小:”

  • 0表示无缓冲
  • 1表示缓冲线
  • 任何其他正值表示使用(大约)该大小的缓冲区
  • 负缓冲意味着使用系统默认值,通常对tty设备进行行缓冲,对其他文件进行完全缓冲
  • 如果省略,则使用系统默认值
代码:


还可以使用该方法以编程方式强制将缓冲区刷新到文件


我发现这在使用
tail-f

跟踪输出文件时很有用。您还可以通过从io模块调用只读默认缓冲区大小属性来检查默认缓冲区大小

import io
print (io.DEFAULT_BUFFER_SIZE)

这是另一种方法,由OP选择他更喜欢的方法

当在任何其他代码之前将下面的代码包括在
\uuuu init\uuuu
.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控制面脚本中复制的,用于“行缓冲”部分。这正是我一直在寻找的,它就像一个符咒。当我
open('file.txt','w',1)
时,使用Python3.4.3,我得到了适当的行缓冲。但是如果我做任何更大的事情(我想打开('file.txt',w',512)),它会缓冲8192的完整
io.DEFAULT\u BUFFER\u SIZE
。这是Python错误、Linux错误还是ID10t错误?是否可以更改已打开流的缓冲区?比方说,我希望
stdout
被行缓冲,而不管它是控制台还是重定向到文件?@CharlieParker当您在文件句柄上调用
write()
时,输出将在内存中缓冲并累积,直到缓冲区满为止。。。此时缓冲区被“刷新”(内容从缓冲区写入文件)。通过调用文件句柄上的
flush()
方法,可以显式刷新缓冲区。请注意,无缓冲(0)仅在二进制模式下可用,行缓冲(1)仅在文本模式下可用。从文档中:
Note:flush()不必将文件的数据写入磁盘。使用flush()后跟os.fsync()以确保此行为。
@bobismijnnaam下次链接到所述文档。“我能找到的唯一参考资料是来自,我不知道那个人是谁。”布鲁诺·布朗斯基说得对<代码>注意:flush()不一定将文件的数据写入磁盘。使用flush()后跟os.fsync()来确保这种行为。我所困惑的是术语
flush
的意思。我们为什么需要它?这是干什么用的?为什么我要关心它?@CharlieParker当你写的时候,你会在RAM中写入文件的一个副本(部分),这个副本可能暂时不会保存到磁盘上。它提高了性能,但如果该拷贝从未被写入(磁盘被删除、操作系统崩溃等),则可能意味着数据丢失。flush()告诉Python立即将缓冲区写回磁盘。(然后,os.fsync()告诉操作系统也这样做。有很多层缓冲区…)谢谢!很高兴知道python将其设置为OS定义。。。但这有助于找出操作系统预先定义的内容。
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()
import io
print (io.DEFAULT_BUFFER_SIZE)
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