下面是我编写的脚本的一部分,该脚本获取列表中的每一项,将其传递给一个函数,将该函数的输出存储为在末尾带有换行符的变量,然后将该变量写入文件中的新行。它还会将变量打印到控制台。
for i in lane_list:
out = count_genes(count, i, reader, total_genes) + '\n'
count += 1
outfile.write(out)
print out
脚本可以工作,但不是我所期望的方式。当脚本运行时,我可以看到输出被打印到控制台,因此我知道脚本通过for循环运行的速率,并且我假设python写入文件的速率与将输出输出到控制台的速率相同。奇怪的是,在很长一段时间内,不会向文件中写入任何内容(我可以通过在脚本运行时在控制台中“引用”文件来看到这一点),然后文件中会同时出现数百行代码。这就像python在一段时间内存储它必须写入文件的内容,然后一次写完所有内容。更令人惊讶的是,有时当我对文件进行cat时,运行的脚本会写出最后一行的一半,但不是全部。
有人能给我解释一下为什么会这样吗?
发布于 2017-03-23 14:13:15
正如@szymon提到的,文件在写入时被缓冲。如果你想看到它是‘实时’编写的,可以在0 means unbuffered的地方使用open('/path/to/file'', 'w', 0)
。
对于python3,使用1表示行缓冲,因为非缓冲只允许用于二进制数据。
https://stackoverflow.com/questions/42978502
复制相似问题