Включение небуферизованного вывода в журнале Python 3.x (с графическим интерфейсом wxPython) - PullRequest
1 голос
/ 26 июня 2019

У меня есть приложение с графическим интерфейсом Py3.x, которое я собираю с Gooey.Приложение полностью функционально, и графический интерфейс работает, как и предполагалось, за исключением встроенной консоли / терминала, получающего буферизованный вывод.

Это не проблема, если я запускаю файл .py с pythonw -u script.py, однако я сейчас пытаюсь связать / заморозить инструмент до .app.Процесс связывания сработал, но все еще существует проблема буферизованного вывода при открытии приложения.

До сих пор я нашел следующее, но ничего, что я пробовал, не сработало:

  • Несколько потоков предложили использовать flush=True с print() для записи при каждом вызове, но logging - что меня здесь интересует - не имеет такого дополнительного флага.Следовательно, различные решения по исправлению обезьян в этом потоке также бесполезны для меня (с учетом того, что я хорошо не знаю внутренности logging, так что, возможно, существует аналогичный подход, применяемый к регистратору, который мог бы работать?Gooey, и процесс упаковки выводит гораздо больше информации о журналировании, чем мои собственные вызовы, и она все еще буферизируется, поэтому кажется, что «глобальный небуферинг» - это то, что действительно необходимо в любом случае.

  • Этот поток предлагает несколько подходов. Действительно, повторное открытие sys.stdout с размером буфера 0 является предлагаемым подходом , однако в первом потоке существует противоречивое мнение о том,он по-прежнему работает на Python 3 в свете PIP 3116, и, конечно, в моих руках, использование

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

    , кажется, полностью нарушает .app.

  • Попытка «вставить» -u или PYTHONUNBUFFERED=1 в шебанги также, похоже, не работает (в данном случае на MacOS), с -S.


* или без него.1042 * Итак, TL; DR :

Как добиться небуферизованного вывода в Python 3.x, когда сценарий не является явным вызовом, вызванным python3 -u?

Я все еще пытаюсь собрать MWE, но использование gooey в сочетании с процессом упаковки делает это немного сложным.

...