@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
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 было. По-хорошему нужно сплитить бинарный выхлоп по абзацам и детектить строки в нём... или взять у пайпа кодировку попробовать.

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

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

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект