我想这样做,以便“check_call()”的“stdout”和“stderr”输出发送到Syslog。这可能吗?
代码:
def command(cmd, err=None, ifexit=False):
try:
check_call(shlex.split(cmd), stdout=null, stderr=null)
except CalledProcessError:
if err != None:
print err
if ifexit == True:
exit(1)
答案 0 :(得分:2)
是的,这是可能的,但我认为您需要使用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)