有没有办法阻止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的输出。
答案 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