Pyinstaller:在Windows上的python 2.7上设置无缓冲的stdio



我有一个Windows 10 python脚本,通常使用以下命令运行:-

python -u my_python_application.py

-u选项用于强制stdin、stdout和stderr完全不缓冲。这给了我的应用程序一种即时的感觉,如果没有它,在操作发生后会延迟记录数据。

我现在正试图通过Pyinstaller创建一个可执行文件。到目前为止,一切都按预期进行,我可以生成一个可执行文件,运行该文件时不会出现任何重大问题。然而,生成的可执行文件没有未缓冲的stdio选项,因此我的应用程序不像其不可执行的形式那样具有即时性/响应性。因此,我的问题是:在使用Pyinstaller时,是否有强制stdio完全无缓冲的方法

我在这里找到了类似的未回复帖子:-

  • Pyinstaller无缓冲运行时选项
  • Pyinstaller未缓冲的stdio
  • Pyinstaller检查u选项的处理

我在Windows 10机器上使用Python v2.7.13和Pyinstaller v3.6。

这更多的是一种变通方法,而不是修复方法,但我能够解决这一问题的方法是在调用print语句时使用选项flush=True。换句话说,我用一个名为app_print()的新函数替换了应用程序中的所有print语句,如下所示:-

#Do something
app_print("printing a generic string")

然后我定义了app_print以始终刷新stdio:-

def app_print(sting):
print(string, flush=True)

这解决了我的问题,生成的可执行文件现在有了与原始python脚本类似的即时感觉。

有关此的更多链接:-

  • 如何刷新打印功能的输出
  • 如何刷新打印功能的输出
  • Python打印函数

最新更新