【问题标题】:Python script inside bash script. How to not print log error on console?bash 脚本中的 Python 脚本。如何不在控制台上打印日志错误?
【发布时间】:2022-01-20 06:03:01
【问题描述】:

我在 bash 脚本中运行了一个 python 脚本,如下所示:

var=$(python <<EOF
try:
  import sys
  import gflags
  var = Dummy.get_dummy_var()
  if var == so_n_so:
    print "found"
  else:
    print "unknown"
except Exception as e:
  pass
EOF
)

在 get_dummy_var() 内部有一个 log.ERROR("some log error message")。这打印在日志文件中。此外,它会打印在运行上述 bash 脚本的控制台上,如下所示:

ERROR:root:some log error message

我不希望控制台上出现上述日志错误消息。我怎样才能做到这一点?

更新 1: log 是 python logging 的包装器

【问题讨论】:

    标签: python bash logging


    【解决方案1】:
    • 一种方法是将日志重定向到NullHandler (python >= 3.1)
    #!/bin/bash
    
    var=$(python3 <<EOF
    import logging
    logging.basicConfig(handlers=[logging.NullHandler()])
    print("usefull text")
    logging.getLogger().critical("critical")
    logging.getLogger().error("an error")
    logging.getLogger().info("a message")
    EOF
    )
    
    echo "var is: $var"
    
    • 或者对于python2:
    #!/bin/bash
    
    var=$(python2 <<EOF
    import logging
    logging.basicConfig(filename="/dev/null")
    print("usefull text")
    logging.getLogger().critical("critical")
    logging.getLogger().error("an error")
    logging.getLogger().info("a message")
    EOF
    )
    
    echo "var is: $var"
    
    • 默认情况下,python 仅将错误和关键记录记录到 stderr,因此您可以重定向 stderr:
    #!/bin/bash
    
    var=$(python3 <<EOF 2>/dev/null
    import logging
    print("usefull text")
    logging.getLogger().critical("critical")
    logging.getLogger().error("an error")
    logging.getLogger().info("a message")
    EOF
    )
    
    echo "var is: $var"
    

    【讨论】:

    • 感谢您的回复,但我需要 var 中 python 脚本的输出。虽然我现在在控制台上看不到错误消息,但这并没有填充变量varecho "var is: $var" 在控制台上打印 var is:
    • 在每种情况下,您都应该拥有var is: usefull text。 ps: NullHandler 仅适用于 python >= 3.1,不适用于 py2
    • 我目前使用的是 Python 2.7。你能为py2推荐一些东西吗?将代码更改为 py3 正在进行中,但现在需要在 py2 中进行此操作。
    • basicConfig(filename="/dev/null") 使用 python 2.7 希望您在导入中没有任何其他日志记录配置。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2012-09-04
    • 2019-10-18
    相关资源
    最近更新 更多