如何使Yum Python API模块输出静音?

时间:2016-11-10 18:39:53

标签: python yum

有没有办法阻止yum API在运行时创建输出?

例如,如果我运行这个简单的代码(使用yum-3.4.3-132.el7.centos.0.1):

import yum
yb = yum.YumBase()
yb.repos.populateSack(mdtype='metadata', cacheonly=0)

我得到以下输出:

Loaded plugins: fastestmirror

我不想黑洞所有输出,只是来自yum API的输出。

2 个答案:

答案 0 :(得分:1)

在这里回答scouser89的答案。

我不确定这是否是每个Yum记录器的详尽列表,但我认为它非常接近。

,您可以在开始调用Yum之前禁用所有这些内容
import logging
from yum.logginglevels import __NO_LOGGING

yumLoggers = ['yum.filelogging.RPMInstallCallback','yum.verbose.Repos', 'yum.verbose.plugin', 
'yum.Depsolve', 'yum.verbose', 'yum.plugin', 'yum.Repos', 'yum', 'yum.verbose.YumBase', 
'yum.filelogging', 'yum.verbose.YumPlugins', 'yum.RepoStorage', 'yum.YumBase', 
'yum.filelogging.YumBase', 'yum.verbose.Depsolve']

for loggerName in yumLoggers:
    logger = logging.getLogger(loggerName)
    logger.setLevel(__NO_LOGGING)

您还可以通过创建一个继承RPMBaseCallback并将其传递到各种事务函数(processTransaction等)的类来覆盖各种RPM事务中的某些进度条/事件记录器。但是,如果您正如上所述禁用所有记录器,则不会调用这些函数。

编辑: 经过进一步检查,我认为最简单的答案是:https://stackoverflow.com/a/43625141/619255

但是,这种方法不会消除有关未完成交易的警告,同时禁用所有记录器。

答案 1 :(得分:-1)

我查看了RHEL7的yum代码,我相信你可以在你的代码中这样做:

import logging
logger = logging.getLogger("yum.verbose.YumPlugins")
# Only print critical logs from yum
logger.setLevel(logging.CRITICAL)

# The "Loaded plugins:" text is printed as a debug. So anything above
# logging.DEBUG should silence it