我有一组代码在无限循环中运行,通过终端用控件C取消。在这段代码中我使用代码json.dumps(dictionary,outfile)
我注意到在我使用控件C终止进程之前,实际上并没有将数据放入文件中。为什么在程序终止之前文件才会更新?
答案 0 :(得分:1)
Anthony Rossi基本上是正确的,您需要使用outfile.flush()
刷新数据。但为什么会这样呢?
json.dump
需要" .write() - 支持类似文件的对象",请参阅here。在代码的某处,您使用open
来获取outfile
。如果我们查看open
的文档,我们可以阅读以下内容:
buffering是一个可选的整数,用于设置缓冲策略。传递0以切换缓冲关闭(仅允许在二进制模式下),1选择行缓冲(仅在文本模式下可用),以及整数> 1表示固定大小的块缓冲区的大小(以字节为单位)。如果没有给出缓冲参数,则默认缓冲策略的工作方式如下:
二进制文件以固定大小的块缓冲;使用启发式方法选择缓冲区的大小,尝试确定底层设备的“块大小”并回退到io.DEFAULT_BUFFER_SIZE。在许多系统上,缓冲区的长度通常为4096或8192字节。
“交互式”文本文件(isatty()返回True的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。
我猜您还没有指定buffering
参数,而且您的数据小于4/8 kb。因此,写入被缓冲而不是直接写入文件。
当您使用Ctrl+C
终止程序时,outfile
将关闭,并将数据刷新到您的文件中。
要解决此问题,只需将outfile.flush()
放在json.dump()
之后,就像Anthony Rossi建议的那样。