2010-10-13 9 views
17

Estoy usando Paramiko en mi código python (para sftp). Todo funciona bien, excepto que cada vez que importo o llamo a una función de paramiko. Esta advertencia se presentaba:Cómo suprimir una advertencia de un tercero 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) 

sé que esto tiene que ver con el hecho de que paramiko está utilizando algunas funcionalidades en desuso de PyCrypto.

Mi pregunta es, ¿hay alguna manera de suprimir esta advertencia programáticamente? He intentado esto:

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

e incluso esto:

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

antes de 'importación paramiko' declaración y antes de las llamadas a funciones-paramiko específica, pero nada funciona. Esta advertencia sigue apareciendo sin importar qué. Si ayuda, aquí está el código de la biblioteca de terceros que imprime la advertencia:

en 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) 

Si usted conoce a una forma de evitar esto, por favor ayúdame cierro esta advertencia fuera.

Respuesta

28

manera más fácil sería que el módulo advertencias sugiere here:

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

¿Cómo le modificar esto para filtrar la única advertencia OP particular, menciona? – VF1

0

Para el filtro sólo una advertencia específica:

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

    #do something that raises a Warning 
Cuestiones relacionadas