首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyInstaller无缓冲stdio

PyInstaller无缓冲stdio
EN

Stack Overflow用户
提问于 2018-09-12 19:44:49
回答 2查看 997关注 0票数 10

问题

码头形象大小一般应尽可能小。使用像标准蟒蛇映像这样的完整环境,通常会在严重臃肿的映像中安装所有依赖项。将python打包到独立的可执行文件(例如使用pyinstaller)是减少图像大小和整体复杂性的完美方法。

Environmentpython3.6pyinstaller==3.4

问题是,python使用每个默认缓冲的stdio。这可以通过使用python -u ...运行python脚本来缓解。但在使用pyinstaller时变得不可访问。

根据文档,应该可以在生成的可执行文件中添加运行时选项,如uvW ...。但不幸的是,在现实中,它似乎不起作用。vW都正常工作,但是u似乎完全被忽略了。

下面的代码片段显示了使用情况:

代码语言:javascript
复制
...
exe = EXE(...
          [('u', None, 'OPTION')],
          name="myapp",
          ...)
...

这个旗子还有效吗?由于其他的工作-它是否被删除而没有通知或更新的文档?

在不修改python代码(如所以 )的情况下,是否有其他方法来禁用stdio的缓冲(使用pyinstaller或外部的)?

为什么要这么做?

在运行码头群服务时,要避免缓冲IO。为了使可执行文件正确地实时登录到docker守护进程,有必要附加一个shell。但是,将tty外壳附加到群集任务使日志的处理变得更加复杂,甚至不可能。

EN

回答 2

Stack Overflow用户

发布于 2021-02-16 14:11:59

至少它在Windows上是坏的(请参阅github问题),而且它不在文档中。

票数 0
EN

Stack Overflow用户

发布于 2021-11-01 08:51:30

这个拉请求修复了这个问题。

'-u‘选项将设置Py_UnbufferedStdioFlag标志,以便在Python中启用未缓冲的stdio模式。

文档演示如何使用规范文件启用运行时选项。

代码语言:javascript
复制
options = [ ('u', None, 'OPTION') ]
a = Analysis( ...
        )
...
exe = EXE(pyz,
  a.scripts,
  options,   <--- added line
  exclude_binaries=...
  )

注意:

这可以在所有支持的Python版本中启用stdout和stderr流的非缓冲二进制层,而未缓冲的文本层则需要Python3.7或更高版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52302361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档