I am using Paramiko in my python code (for sftp). Everything works fine except that everytime I import or call a paramiko function. This warning would show up:
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)
I know that this has to do with the fact that Paramiko is using some Deprecated functionalities of PyCrypto.
My question is, is there a way to suppress this warning programmatically ? I have tried this:
warnings.filterwarnings(action='ignore', \ category=DeprecationWarning, module='paramiko')
and even this:
warnings.filterwarnings(action='ignore', \ category=DeprecationWarning, module='randpool')
before 'import paramiko' statement and before paramiko-specific function calls, but nothing works. This warning keeps showing up no matter what. If it helps, here's the code in the third party library that prints the warning:
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)
If you know a way around this, please help me shut this warning off.
Use the filterwarnings() Function to Suppress Warnings in Python. The warnings module handles warnings in Python. We can show warnings raised by the user with the warn() function. We can use the filterwarnings() function to perform actions on specific warnings.
Use warnings. filterwarnings() to ignore deprecation warnings Call warnings. filterwarnings(action, category=DeprecationWarning) with action as "ignore" and category set to DeprecationWarning to ignore any deprecation warnings that may rise.
Easiest way would be as the warnings module suggests here:
with warnings.catch_warnings(): warnings.simplefilter("ignore") import paramiko
The module
argument to warnings.filterwarnings
takes a case-sensitive regular expression which should match the fully qualified module name, so
warnings.filterwarnings( action='ignore', category=DeprecationWarning, module=r'.*randpool' )
or
warnings.filterwarnings( action='ignore', category=DeprecationWarning, module=r'Crypto\.Utils\.randpool' )
should work. You may need to write RandomPool_DeprecationWarning
explicitly instead of DeprecationWarning
if for some reason RandomPool_DeprecationWarning
is not a subclass of DeprecationWarning
.
You can also disable the warning on the command line when you invoke the script by passing the -W
option to the interpreter like so:
$ python -W ignore::RandomPool_DeprecationWarning:Crypto.Utils.randpool: my_script.py
The -W
takes filters in the format action:message:category:module:lineno
, where this time module
must exactly match the (fully-qualified) module name where the warning is raised.
See https://docs.python.org/2/library/warnings.html?highlight=warnings#the-warnings-filter and https://docs.python.org/2/using/cmdline.html#cmdoption-w
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With