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 完全无缓冲?
我在这里发现了类似的未回复帖子:-
- Pyinstaller unbuffered runtime option
- Pyinstaller unbuffered stdio
- Pyinstaller examine handling of u option
我在 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 脚本类似的即时感觉。
关于此的更多链接:-
- How can I flush the output of the print function
- How to flush output of print function
- Python print function
我有一个 Windows 10 python 脚本,我通常 运行 使用以下命令:-
python -u my_python_application.py
-u
选项用于强制 stdin、stdout 和 stderr 完全 unbuffered。这给我的应用程序一种即时的感觉,如果没有它,在操作发生后记录数据会有延迟。
我现在正尝试通过 Pyinstaller 创建一个可执行文件。到目前为止,一切都按预期工作,我可以生成一个可执行文件,我可以 运行 没有任何重大问题。但是,生成的可执行文件没有无缓冲的 stdio 选项,因此我的应用程序不像其不可执行形式那样 instantaneous/responsive。所以我的问题是:在使用 Pyinstaller 时是否强制 stdio 完全无缓冲?
我在这里发现了类似的未回复帖子:-
- Pyinstaller unbuffered runtime option
- Pyinstaller unbuffered stdio
- Pyinstaller examine handling of u option
我在 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 脚本类似的即时感觉。
关于此的更多链接:-
- How can I flush the output of the print function
- How to flush output of print function
- Python print function