【问题标题】:sys.stdout.flush() not working properly with python and electronjssys.stdout.flush() 无法与 python 和 electronjs 一起正常工作
【发布时间】:2020-10-25 02:15:10
【问题描述】:

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

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

类似问题:Python sys.stdout.flush() doesn't work

【问题讨论】:

  • stdout 可能是行缓冲的,即它实际上会在行尾时输出。您的消息是否包含行尾?否则,请尝试使用 python -u 运行您的程序
  • @xhienne 有没有办法在我的脚本中调用 -u 选项?

标签: python io electron flush sys


【解决方案1】:

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 开始,请先执行 f.flush(), 然后执行os.fsync(f.fileno()),以确保所有内部缓冲区 与 f 关联的内容被写入磁盘。

【讨论】:

  • 我尝试了以下 - print("Test") sys.stdout.flush() os.fsync(sys.stdout.fileno()) print("Test2") sys.stdout.flush() os.fsync(sys.stdout.fileno()) print("Test3") sys.stdout.flush() os.fsync(sys.stdout.fileno()) 并且调用此 python 脚本的 js 脚本应该将 HTML 上的元素更改为打印的任何内容,而不是将其更改为每个不同的打印语句它立即跳到最后一个。当我在打印之间添加 time.sleep() 或运行任何函数时,程序会到达并停止执行。
  • @Avi,你试过运行我上面的代码吗?这将解决问题
  • 我做了,我在上面的评论中描述了我的错误(我编辑了它)。抱歉,如果格式不好,我是新手
  • 我尝试运行代码,但程序在 os.fsync 行后停止执行
猜你喜欢
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2017-12-14
  • 2020-08-19
  • 2013-02-06
  • 2019-02-02
相关资源
最近更新 更多