2010-10-13 13 views
17

Sto usando Paramiko nel mio codice Python (per sftp). Tutto funziona bene, tranne che ogni volta che importare o chiamare una funzione paramiko. Questo avviso si presentava:Come sopprimere un avviso di terze parti usando warnings.filterwarnings

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) 

So che questo ha a che fare con il fatto che paramiko sta usando alcune funzionalità obsolete di pycrypto.

La mia domanda è, c'è un modo per sopprimere questo avviso a livello di codice? Ho provato questo:

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

e anche questo:

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

prima 'importazione paramiko' dichiarazione e prima di chiamate di funzione specifica per paramiko, ma non funziona niente. Questo avviso continua a comparire indipendentemente da cosa. Se aiuta, ecco il codice nella libreria di terze parti che stampa l'avvertimento:

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) 

Se conoscete un modo per aggirare questo, si prega di aiutarmi a chiudere questo avvertimento off.

risposta

28

modo più semplice sarebbe come il modulo di avvertimenti suggerisce here:

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

Come ti modificare questo solo filtrare particolare OP avvertimento menziona? – VF1

0

per filtrare solo una specifica avvertenza:

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

    #do something that raises a Warning 
Problemi correlati