2016-11-10 11 views
0

yum APIの実行時に出力を作成しないようにする方法はありますか?例えばYum Python APIモジュールの出力を消音するにはどうしたらいいですか?

、私は(YUM-3.4.3-132.el7.centos.0.1で)この単純なコードを実行する場合:

Loaded plugins: fastestmirror 

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

は、私は次の出力を得ます私はブラックホールにしたくないすべて出力、yum APIからの出力。

答えて

0

私は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 
1

がここthescouser89の答えにピギーバック。

これはすべての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

しかし、このアプローチは、不完全なトランザクションについての警告を沈黙しません。

関連する問題