我想把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脚本将捕获它们。