PyInstaller 无缓冲 stdio

p-j*_*j-e 9 python stdio pyinstaller docker

问题

Docker 映像大小通常应尽可能小。使用像标准 python映像这样的成熟环境,在安装了所有依赖项的情况下,经常会导致严重臃肿的映像。将 python 打包成独立的可执行文件(例如使用 pyinstaller)是减少图像大小和整体复杂性的完美方式。

环境python3.6pyinstaller==3.4

出现的问题是,python 使用每个默认的缓冲 stdio。这可以通过使用python -u .... 但是在使用 pyinstaller 时变得无法访问。

根据文档,应该可以向生成的可执行文件添加运行时选项,例如u,vW ...。但不幸的是,实际上它似乎不起作用。两者,v并且W,正常工作,但u似乎被完全忽略。

以下代码段显示了用法:

...
exe = EXE(...
          [('u', None, 'OPTION')],
          name="myapp",
          ...)
...
Run Code Online (Sandbox Code Playgroud)

这个标志还有效吗?由于其他人工作 - 它是否在没有通知或更新文档的情况下被删除?

是否有替代方法可以禁用 stdio 缓冲(使用 pyinstaller 或外部),不像这样修改 python 代码?

为什么需要那个?

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

kar*_*bal 0

至少它在 Windows 上被破坏了(请参阅github 上的问题)并且 it\xe2\x80\x99s 不在文档中。

\n