我正在考虑在我们的一个部署脚本包装器中使用pexpect
(如果有更好的我不知道的话,完全可以接受)但是我需要一种方法来实时读取输出,而不仅仅是在我们点击EOF
之后。由于这是一个用于所有环境的部署包,因此我们需要在问题发生时立即捕获(如果问题非常严重,则可能会击中紧急出口)。在
有这样的东西我可以用吗?理想情况下,我想利用我们已经存在的记录器。。在
def SetupLogging():
# the logger
# set to DEBUG since the reports should already give
# any information we're looking for at a glance
global log
log = logging.getLogger('ansiwrap')
log.setLevel(logging.DEBUG)
# create file handler which logs everything
fh = logging.FileHandler('ansiwrap.debug', mode='w')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# create formatter and add it to the handlers
formatter = logging.Formatter('[%(asctime)s] | %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
log.addHandler(ch)
log.addHandler(fh)
为了完整起见,下面是一个示例实现,但对我来说它似乎很笨拙:
^{pr2}$
子进程终止时,
EOF
被命中。要获得正在发送的命令和接收到的回复的实时输出,可以将输出记录到stdout或文件中。在Pexpect的Spawn类有一个logfile_read属性,该属性将子进程的输出写入指定的文件。 修改如下所示的代码就可以了。我正在使用系统标准输出它会将所有内容打印到控制台。你可以打开一个文件并使用它
仍然需要
while
块的原因是,根据文档,日志文件在每次写入后都会被刷新。由于不存在写入操作,调用expect将导致文件刷新。在相关问题 更多 >
编程相关推荐