首页 文章

python多久刷新一次文件?

提问于
浏览
169
  • Python多久刷新一次文件?

  • Python多久会刷新到stdout?

关于(1)我不确定 .

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

5 回答

  • 0

    您还可以通过从io模块调用只读DEFAULT_BUFFER_SIZE属性来检查默认缓冲区大小 .

    import io
    print (io.DEFAULT_BUFFER_SIZE)
    
  • 12

    对于文件操作,Python使用操作系统的默认缓冲,除非您另行配置 . 您可以指定缓冲区大小,未缓冲或行缓冲 .

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

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

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

    • 0表示无缓冲,

    • 1表示行缓冲,

    • 任何其他正值意味着使用(大约)该大小的缓冲区 .

    • 负缓冲意味着使用系统默认值,通常为tty设备进行行缓冲,并为其他文件进行完全缓冲 .

    • 如果省略,则使用系统默认值 .

    码:

    bufsize = 0
    f = open('file.txt', 'w', buffering=bufsize)
    
  • 10

    您还可以使用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 拖尾输出文件时发现这很有用 .

  • 134

    我不知道这是否也适用于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()
    
  • 264

    这是另一种方法,直到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控制界面脚本复制而来

相关问题