Выход из Python flush не работает с библиотекой cffi

У меня странное поведение с использованием приложения Python, (работает под supervisor), которая использует библиотеку C для инициализации компонента.

Моя проблема в том, что я не могу увидеть вывод, напечатанный этой библиотекой C, когда я вызываю функцию там.

Весь вывод в приложении управляется с помощью logging модуль, и супервизор перенаправляет его в один файл журнала.

Так что я подумал, что это просто flush проблема, и я попробовал следующее:

lib.init_func()
sys.stdout.flush()
sys.stderr.flush()

Но это не работает. Я не вижу своего printf() в файле журнала.

Кроме того, я заметил, что если я пытаюсь перезапустить приложение:sudo supervisorctl restart allВывод библиотеки C окончательно сбрасывается в конце файла журнала!

Наконец, настройка PYTHONUNBUFFERED=1 в supervisorctl делает это работает, но я не хочу запускать мою программу без буферизации из-за проблем с производительностью.

-> Может кто-нибудь объяснить, почему с помощью sys.stdout.flush() после того, как вызов библиотеки C не сбрасывает, это выводит на мой файл журнала?

Спасибо!

0 ответов

Другие вопросы по тегам