Я использую Tensorflow и Keras. У меня есть скрипт Python для запуска процесса прогнозирования, и мне нужно запустить его в подпроцессе, поэтому я делаю это так:
from subprocess import Popen, PIPE, TimeoutExpired
process = Popen(['python', 'start_prediction.py'], stdout=PIPE, stderr=PIPE)
try:
output, errors = process.communicate(timeout=60)
except TimeoutExpired:
process.kill()
output, errors = process.communicate()
У меня есть регистратор, настроенный для моего приложения, и он работает нормально, ноесть также регистратор, используемый Tensorflow, и это то, с чем у меня проблема.
Мой регистратор настроен для использования StreamHandler с sys.stdout
и FileHandler. Когда я распечатываю output
и errors
, все мои сообщения журнала сохраняются в output
, в errors
ничего нет. И это то, что я хочу.
С другой стороны, регистратор, используемый Tensorflow, не работает так, как мне нужно. Некоторые сообщения регистрируются в output
(например, процесс прогнозирования и некоторые предупреждения), а некоторые из них регистрируются в потоке errors
(другие предупреждения). Я не могу сказать, если приложение не удалось или нет, потому что, даже если оно работало и завершилось без ошибок, я все еще получаю сообщения в потоке errors
.
Я пытался перенаправить всесообщения от Tensorflow к sys.stdout
делают это:
from absl import logging
logging._warn_preinit_stderr = 0
и
import logging
import sys
from tensorflow.python.platform import tf_logging
tf_logging.get_logger().handlers = [logging.StreamHandler(sys.stdout)]
, но это не помогает (logging
импорт находится в разных файлах, вот упрощенныйверсия). На самом деле, это не имеет никакого значения, по крайней мере, я не видел.
Теоретически, я получаю только предупреждения, поэтому я мог подавлять все предупреждающие сообщения и сохранять только ошибки, но я бы предпочел не делатьэто. Должен быть лучший способ справиться с этим.
Есть ли способ перенаправить весь вывод Tensorflow в поток sys.stdout
? Или, может быть, есть другой способ не отображать никаких сообщений об ошибках в выводе errors
?