【问题标题】:How to get python logging output in shell script如何在 shell 脚本中获取 python 日志输出
【发布时间】:2022-11-24 03:59:18
【问题描述】:

我想将 python 文件的标准输出放入 shell 脚本中。我最初使用 print 并且它工作正常但它不适用于日志记录。

ab.py

import logging
logger = logging.getLogger()
logging.basicConfig(level=logging.INFO)

logging.info('2222222222222')
print("111111111111")

光盘

#/bin/bash
set -e
set -x

communities=$(python3 ab.py) 
echo $communities

执行 cd.sh 的输出我得到的输出仅为 111111111111 而不是 2222222222222

【问题讨论】:

    标签: python shell logging


    【解决方案1】:

    日志打印到 stderr 而不是 stdout。这是两个独立的数据流。您可以通过在Input/Output Redirection 上学习一点来管理这些。但是,在这里总结是一个很大的话题。

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

    【讨论】:

      【解决方案2】:

      默认情况下,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 脚本将捕获它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-15
        • 2018-07-12
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        相关资源
        最近更新 更多