Да, это возможно, но я думаю, что вам нужно будет использовать Popen
вместо check_call
и отправить процесс stdout
и stderr
к правильной настройке регистратора. Такой регистратор использовал бы logging.handlers.SysLogHandler
для отправки сообщений на ваш сервер syslog. Вот краткий пример того, как можно было бы создать такой регистратор:
import logging
handler = logging.handlers.SysLogHandler()
logger = logging.getLogger('myApplication')
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
А вот пример того, как вы могли бы заменить check_call
с Popen
и отправить данные в регистраторе:
process = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE)
# Popen.wait() waits for the command to complete and
# returns the command's return code
if process.wait() != 0:
print "AN ERROR OCCURED"
logger.error(process.stderr)
logger.info(process.stdout)
Хорошо, но как мне получить Popen, чтобы сказать мне, успешно ли выполнена команда? – Soviero
@ Kevin просто проверьте значение ['process.returncode'] (http://docs.python.org/library/subprocess.html?highlight=subprocess#subprocess.Popen.returncode) или используйте' process.wait() 'метод. Я обновил свой ответ, чтобы дождаться завершения команды и проверить, успешно ли она выполнена. – MatToufoutu