Задать вопрос
@cbv

Как обработать вывод ошибок в скрипте на Python в Debian?

Существует скрипт на Python, который через subprocess запускает mosquitto.

Программа выполняется, но пишет в Syslog:
Warning: Unable to locate configuration directory, default config not loaded.

Данная ошибка не является критичной и убирается только через обновление версии mosquitto, а это не представляется возможным.

Вопрос - как можно сделать, чтобы именно эта ошибка не писалась в лог, а остальные писались?

Как я запускаю mosquitto:

try:
    subprocess.check_call(args)
except subprocess.CalledProcessError as e:
    sys.stderr.write(
    'ERROR: call to mosquitto_pub failed with error code {}\n'.format(e.returncode))
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Например так:
ERR = 'Warning: Unable to locate configuration directory, default config not loaded.'
try:
    output = subprocess.check_output(args)
except subprocess.CalledProcessError as e:
    sys.stderr.write(
    'ERROR: call to mosquitto_pub failed with error code {}\n'.format(e.returncode))
else:
    for line in output.decode('utf-8').split('\n'):
        if err not in line:
            print(line, file=sys.stderr)

Но учтите, в случае ошибки в этом варианте вы не получите вообще никакого выхлопа от вашего насекомого.
Если выхлоп нужен в реальном времени, то вы его тоже можете профильтровать. Чуть сложнее будет.
Придётся сделать фильтрующую прокси-обёртку для stderr, который подать сабпроцессу.
Также нужно с осторожностью отнестись к конвертации кодировки. вдруг там не utf-8 было. По-хорошему нужно сплитить бинарный выхлоп по абзацам и детектить строки в нём... или взять у пайпа кодировку попробовать.

НО! Я, вот, только что подумал, что это проще и лучше сделать со стороны баша. В командной строке где вы запускаете своего москита можно пайпом добавить тупой фильтр строк (хоть даже грепом).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы