如果我仍在执行文件I / O操作时突然关闭脚本会发生什么?

时间:2011-01-06 14:23:55

标签: python file-io

这是我的问题:我正在编写一个脚本来检查我的网站是否正常运行,基本思路是每隔5分钟左右获取服务器响应时间和类似内容,脚本每次都会记录信息检查服务器状态后。我知道在检查/写入日志的过程中关闭脚本是没有用的,但我很好奇是否有很多服务器需要检查,而且你必须经常进行文件I / O,会发生什么如果你突然关闭脚本?

好的,这是一个例子:

while True:
    DemoFile = open("DemoFile.txt", "a")
    DemoFile.write("This is a test!")
    DemoFile.close()

    time.sleep(30)

如果我在此行DemoFile.write("This is a test!")运行时意外关闭了脚本,我会在DemoFile.txt中获得什么?我是否收到“This i”(不完整的行)或完整的行或行甚至没有添加?

希望有人知道答案。

1 个答案:

答案 0 :(得分:2)

根据python io documentation,缓冲是根据open函数的缓冲参数处理的。

在这种情况下,如果无法确定块大小,则默认行为是设备的块大小或io.DEFAULT_BUFFER_SIZE。这可能是4096字节。

简而言之,这个例子什么都不写。如果你写的东西足够长,缓冲区写了一次或两次,你就会写入多倍的缓冲区大小。并且您始终可以使用flush()手动刷新缓冲区。

(如果你指定缓冲为0,文件模式指定为二进制,你会得到“这个我”。这是唯一的方法,但是)

正如@sven指出的那样,python没有做缓冲。程序终止时,操作系统将关闭并刷新所有打开的文件描述符。