10

我正在编写一个程序,我希望能够在程序完成之前查看日志文件。我注意到,在 python(2.7 和 3)中,file.write()它不会保存文件file.close()。我不想创建一百万个具有唯一名称的小日志文件,但我希望能够在程序完成之前查看更新的日志文件。我怎样才能做到这一点?

现在,要明确的是,我正在使用 Ansys Workbench 编写脚本(尝试批处理一些 CFX 运行)。这是一个教程的链接,它显示了我在说什么。他们似乎已经包装了 python,并且通过运行脚本,我可以将命令发送到各个模块。当脚本运行时,屏幕上没有控制台,它似乎正在吃掉所有的print语句,所以我可以报告正在发生的事情的唯一方法是通过文件。另外,我不想打开控制台窗口,因为最终我只会以批处理模式(无界面)运行程序。但是模拟需要很长时间才能运行,我迫不及待地等待程序完成,然后再检查正在发生的事情。

4

3 回答 3

31

你需要这个:

file.flush()
# typically the above line would do. however this is used to ensure that the file is written
os.fsync(file.fileno())

检查这个:http ://docs.python.org/2/library/stdtypes.html#file.flush

file.flush() 刷新内部缓冲区,就像 stdio 的 fflush()。这可能对某些类似文件的对象是无操作的。注意 flush() 不一定将文件的数据写入磁盘。使用 flush() 后跟 os.fsync() 来确保这种行为。

已编辑:有关详细说明,请参阅此问题:python 的 file.flush() 到底在做什么?

于 2013-11-03T18:34:34.437 回答
4

每次写入后是否有 file.flush() 帮助?

汉努

于 2013-11-03T18:33:45.153 回答
1

这将立即将文件写入磁盘:

file.flush()
os.fsync(file.fileno())

根据文档https://docs.python.org/2/library/os.html#os.fsync

强制使用文件描述符 fd 将文件写入磁盘。在 Unix 上,这会调用本机 fsync() 函数;在 Windows 上,MS _commit() 函数。

如果从 Python 文件对象 f 开始,首先执行 f.flush(),然后执行 os.fsync(f.fileno()),以确保与 f 关联的所有内部缓冲区都写入磁盘。

于 2016-06-23T13:43:16.447 回答