首页 > 解决方案 > sys.stdout.flush() 无法与 python 和 electronjs 一起正常工作

问题描述

我正在构建一个 electronjs python 应用程序,并且正在使用 pythonshell 模块。电子应用程序应该将我的 python 脚本打印到控制台的任何消息记录下来,但不是在应该打印每条消息时打印它,而是等待脚本完成执行,然后打印所有内容。我试过用sys.stdout.write("message")then sys.stdout.flush(),但还是不行

我正在链接的问题与我有类似的问题,但对他们有用的答案在电子应用程序上对我不起作用。它在 python 后端正确刷新,前端是导致问题的原因。

类似的问题:Python sys.stdout.flush() 不起作用

标签: pythonioelectronflushsys

解决方案


file.flush()不一定将文件的数据写入磁盘!。您需要使用flush()后跟os.fsync(fd)以确保此行为。

见下文:

sys.stdout.flush()
os.fsync(sys.stdout.fileno())

os.fsync(fd)来自 python 文档的文档

强制将带有文件描述符的文件写入fd磁盘。在 Unix 上,这调用了本机fsync()函数;在 Windows 上,该MS _commit() 功能。

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


推荐阅读