如何在shell脚本中获得python日志输出



我想把python文件中的stdout放到shell脚本中。我最初使用print,它工作得很好,但它不能用于日志记录。

ab.py

import logging
logger = logging.getLogger()
logging.basicConfig(level=logging.INFO)
logging.info('2222222222222')
print("111111111111")

cd.sh

#/bin/bash
set -e
set -x
communities=$(python3 ab.py) 
echo $communities

执行cd.sh的输出我得到的输出只有111111111111,而不是2222222222222

日志打印标准错误而不是标准输出。这是两个独立的数据流。您可以通过学习输入/输出重定向来管理这些。但是,在这里总结一下这个话题有点大。

tl/dr:让你的命令是python3 ab.py 2>&1,你会得到你想要的输出。您将看到记录消息出现在打印消息之前。这是因为stderr是未缓冲的,而stdout是缓冲的。

默认情况下,Python日志系统记录到stderr。你只捕获了stdout。要将Python日志系统配置为输出到stdout,这听起来像是您想要的,您可以稍微修改一下代码,如下所示:

import logging
import sys
logger = logging.getLogger()
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logging.info('2222222222222')
print("111111111111")

这样,两行输出都转到stdout,因此shell脚本将捕获它们。

相关内容

  • 没有找到相关文章

最新更新