我有一个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打印函数