Python 是否将函数输出打印到系统日志?

Python 是否将函数输出打印到系统日志?,python,logging,syslog,Python,Logging,Syslog,我想使“check_call()”的“stdout”和“stderr”输出发送到Syslog。这可能吗 代码: 是的,这是可能的,但我认为您需要使用Popen而不是check\u call,并将进程'stdout和stderr发送到正确配置的记录器。 这样的记录器将使用logging.handlers.SysLogHandler向syslog服务器发送消息。以下是如何创建此类记录器的简短示例: import logging handler = logging.handlers.SysLogHa

我想使“check_call()”的“stdout”和“stderr”输出发送到Syslog。这可能吗

代码:


是的,这是可能的,但我认为您需要使用
Popen
而不是
check\u 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\u 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)

我在2017年遇到了这个问题,所以我认为继续为Python3更新这个问题可能会很好,因为解决方案需要稍加修改。为了能够使用Python 3中的
SysLogHandler
,您必须按如下方式调整代码:

 import logging
 import logging.handlers as handlers

 handler = handlers.SysLogHandler(address='/dev/log')
 logger = logging.getLogger('myApplication')
 logger.setLevel(logging.DEBUG)
 logger.addHandler(handler)
如前所述,
SysLogHandler
class

返回SysLogHandler类的新实例,该类用于与远程Unix计算机通信,远程Unix计算机的地址由地址以(主机,端口)元组的形式给出。如果未指定地址,则使用('localhost',514)。该地址用于打开套接字。提供(主机、端口)元组的另一种方法是以字符串形式提供地址,例如“/dev/log”。在本例中,使用Unix域套接字将消息发送到系统日志


好的,但是如何让Popen告诉我命令是否成功执行?@Kevin只需检查值或使用
process.wait()
方法。我已经更新了我的答案,等待命令完成并检查它是否成功。
 import logging
 import logging.handlers as handlers

 handler = handlers.SysLogHandler(address='/dev/log')
 logger = logging.getLogger('myApplication')
 logger.setLevel(logging.DEBUG)
 logger.addHandler(handler)