在python.3中启用unbuffered.python输出

2024-09-30 06:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Gooey构建了一个Py3.xgui应用程序。该应用程序功能齐全,除了接收缓冲输出的内置控制台/终端外,GUI按预期工作。在

如果我用pythonw -u script.py运行.py文件,这不是问题,但是我现在尝试将该工具捆绑/冻结到.app。绑定过程已经成功,但在应用程序打开时仍然存在缓冲输出的问题。在

到目前为止,我发现了以下几点,但我所做的一切都没有奏效:

  • 有几个线程建议使用flush=Trueprint()来编写每个调用,但是logging(这是我在这里感兴趣的)没有这样的补充标志。因此,该线程中的各种monkey补丁解决方案对我也没有用处(但有一个警告,我不知道logging的内部结构,所以也许有一个类似的方法可以应用到一个记录器上,它可以工作吗?Gooey本身,而且打包过程输出的日志信息比我自己的调用要多得多,而且这仍然是缓冲的,所以看起来“全局解除缓冲”似乎是真正需要的。

  • This thread提供了许多方法。实际上,重新打开缓冲区大小为0的sys.stdout就是suggested approach,但是在第一个线程中,关于它是否仍然可以在pip3116下在python3上工作存在着矛盾的意见,当然在我的手上,使用

    nonbuffered_stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
    sys.stdout = nonbuffered_stdout
    

    似乎完全打破了.app

  • 尝试将一个-uPYTHONUNBUFFERED=1注入shebangs中,无论是否使用-S,似乎也不起作用(在本例中,在MacOS上)。


因此,TL;DR

当脚本不是用python3 -u显式调用时,Python3.x中如何实现无缓冲的输出?

我仍在尝试组装一个MWE,但是使用gooey与打包过程相结合使这有点困难。在


Tags: 方法pyapp应用程序过程loggingstdoutsys

热门问题