2010-10-13 11 views
17

Ich verwende Paramiko in meinem Python-Code (für sftp). Alles funktioniert gut, außer dass ich jedes Mal eine Paramiko Funktion importiere oder anrufe. Diese Warnung auftauchen würde:So unterdrücken Sie eine Warnung von Drittanbietern mit Warnungen.filterwarnungen

C:\Python26\lib\site-packages\Crypto\Util\randpool.py:40: RandomPool_Deprecation 
Warning: This application uses RandomPool, which is BROKEN in older releases. S 
ee http://www.pycrypto.org/randpool-broken 
    RandomPool_DeprecationWarning) 

Ich weiß, dass dies mit der Tatsache zu tun, dass paramiko einige Veralten Funktionalitäten von PyCrypto verwendet.

Meine Frage ist, gibt es eine Möglichkeit, diese Warnung programmgesteuert zu unterdrücken? Ich habe dies versucht:

warnings.filterwarnings(action='ignore', \ 
category=DeprecationWarning, module='paramiko') 

und auch dies:

warnings.filterwarnings(action='ignore', \ 
category=DeprecationWarning, module='randpool') 

vor 'Import paramiko' Anweisung und vor paramiko spezifische Funktionsaufrufe, aber nichts funktioniert. Diese Warnung wird immer angezeigt, egal was passiert. Wenn es hilft, hier ist der Code in der Dritten Bibliothek, die die Warnung ausgibt:

in randpool.py:

from Crypto.pct_warnings import RandomPool_DeprecationWarning 
import Crypto.Random 
import warnings 

class RandomPool: 
    """Deprecated. Use Random.new() instead. 

    See http://www.pycrypto.org/randpool-broken 
    """ 
    def __init__(self, numbytes = 160, cipher=None, hash=None, file=None): 
     warnings.warn("This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken", 
      RandomPool_DeprecationWarning) 

Wenn Sie einen Weg, um dieses wissen, bitte helfen Sie mir diese Warnung abgeschaltet.

Antwort

28

einfachste Weg wäre, wie die Warnungen Modul here schlägt vor:

with warnings.catch_warnings(): 
    warnings.simplefilter("ignore") 
    import paramiko 
+0

Wie würden Sie dies ändern, um nur die besondere Warnung OP erwähnt zu filtern? – VF1

0

nur eine bestimmte Warnung zu filtern:

with warnings.catch_warnings(): 
    warnings.simplefilter('ignore', SpecificWarningObject) 

    #do something that raises a Warning