Мой скрипт python должен вызывать программу, обнаруживать, не удалось ли она (например, result != 0
) и отправить вывод программы на оба stdout как обычный плюс файл журнала.Как использовать python subprocess.call, отправляя копию stdout в лог-файл, при обнаружении результата первой команды
My default shell is bash. Я использую Python 2.7.9
Для отправки вывода на стандартный вывод как и файл я обычно использую tee
:
result = subprocess.call('some_program --an-option | tee -a ' + logfile , shell=True)
Однако труба в Баш возвращает истину, даже если первая команда не , поэтому этот подход не может определить, не сработала ли команда.
Если я пытаюсь использовать set -o pipefail
в команде (так что результат будет указывать, если первая команда не) так:
result = subprocess.call('set -o pipefail && some_program --an_option | tee -a ' + logfile , shell=True)
Я получаю ошибку /bin/sh: 1: set: Illegal option -o pipefail
Есть ли способ python, чтобы вызвать команду, отправить вывод как в обычную консоль stdout, так и в файл журнала, и все еще определить, не сработала ли команда?
Примечание: мы должны продолжить отправку вывода some_program в stdout, поскольку stdout отправляется в websocket.