Выход из 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 не сбрасывает, это выводит на мой файл журнала?
Спасибо!