在python 3.x(使用wxPython GUI)日志中启用未缓冲的输出

Joe*_*ley 5 python wxpython output-buffering

我有一个一直在使用的Py3.x GUI应用程序Gooey。该应用程序功能齐全,并且GUI可以按预期工作,但内置控制台/终端接收缓冲的输出除外。

如果我使用来运行.py文件,这不是问题pythonw -u script.py,但是我现在尝试将工具捆绑/冻结到中.app。捆绑过程一直有效,但是在打开应用程序时仍然存在缓冲输出的问题。

到目前为止,我发现了以下内容,但没有尝试过:

  • 一些线程建议在每次调用时使用flush=Truewith print()进行写操作,但是logging-我在这里感兴趣的是-没有这样的互补标志。因此,该线程中的各种猴子修补解决方案对我也没有用(需要注意的是,我对logging井的内部结构并不了解,因此也许对记录器Gooey本身也可以应用类似的方法,并且打包过程输出的日志记录信息比我自己的调用要多得多,并且仍在缓冲中,因此看来“全局取消缓冲”才是真正需要的。

  • 该线程提供了许多方法。确实,建议sys.stdout使用0缓冲区大小的重新打开方法,但是在第一个线程中,根据PIP 3116以及在我看来,使用PIP 3116,它是否仍然可以在Python 3上使用还存在争议。

    nonbuffered_stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
    sys.stdout = nonbuffered_stdout
    
    Run Code Online (Sandbox Code Playgroud)

    似乎.app完全打破了。

  • 尝试将“ a” -uPYTHONUNBUFFERED=1“ shebang ”“注入” ,无论是否带有,都似乎不起作用(在本例中为MacOS)-S


因此,TL; DR

当未显式调用脚本时,如何在Python 3.x中实现无缓冲输出python3 -u

我仍在尝试将MWE gooey组合在一起,但是结合使用打包过程会使这变得有些困难。