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

Pyinstaller: setting unbuffered stdio on python 2.7 on Windows

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

python -u my_python_application.py

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

我现在正尝试通过 Pyinstaller 创建一个可执行文件。到目前为止,一切都按预期工作,我可以生成一个可执行文件,我可以 运行 没有任何重大问题。但是,生成的可执行文件没有无缓冲的 stdio 选项,因此我的应用程序不像其不可执行形式那样 instantaneous/responsive。所以我的问题是:在使用 Pyinstaller 时是否强制 stdio 完全无缓冲?

我在这里发现了类似的未回复帖子:-

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

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

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

然后我定义 app_print 总是刷新 stdio:-

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

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

关于此的更多链接:-