【问题标题】:Python disable logging for command line modulePython禁用命令行模块的日志记录
【发布时间】:2020-10-18 05:56:32
【问题描述】:

我想做的事情看起来很简单,但我找不到办法。我正在尝试在脚本中使用模块 Pipreqs,但我必须使用 subprocess.call(),因为 Pipreqs 无法在脚本中使用它。 Pipreqs 使用日志记录来记录信息,我不希望这样。 Pipreqs 也没有安静模式。我尝试使用logger.setLevel(logging.WARNING),但由于我通过subprocess.call() 调用它,它仍然会打印信息。我也尝试过导入 Pipreqs 并将日志记录级别设置为警告,但这也不起作用。有没有办法禁用这个输出?我现在的代码如下:

import subprocess
import logging
import pipreqs
logger = logging.getLogger("pipreqs")
logger.setLevel(logging.WARNING)
subprocess.call(["pipreqs", "--force","/path/to/dir"])

【问题讨论】:

  • 你不能只是重定向标准输出并忽略它吗?
  • 它仍然打印信息
  • 我没有尝试过重定向到 PIPE,但是我尝试过重定向到 /dev/null 并且没有成功。我可以尝试将其重定向到 PIPE,但我不想缓冲以填满,我什至不确定这是否可行

标签: python logging subprocess


【解决方案1】:

您将无权访问外部进程的记录器。子进程模块确实有禁用输出的标志。

subprocess.call(
  ["pipreqs", "--force","/path/to/dir"],
  stdout=subprocess.DEVNULL,
  stderr=subprocess.DEVNULL
)

【讨论】:

  • 谢谢!我之前尝试过,但使用了不同的方式。我想我的方法行不通
  • 是的,stdout/stderr 重定向还不完全统一。例如。 contextlib.redirect_stdout() 不适用于子进程,也不适用于日志模块生成的输出——即使是同一进程。
猜你喜欢
  • 2011-11-02
  • 2016-05-21
  • 2014-10-21
  • 2020-08-11
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多