Python 是否将函数输出打印到系统日志?
我想使“check_call()”的“stdout”和“stderr”输出发送到Syslog。这可能吗 代码: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
是的,这是可能的,但我认为您需要使用
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)