2010-10-13 24 views
17

Tôi đang sử dụng Paramiko trong mã python của tôi (cho sftp). Tất cả mọi thứ hoạt động tốt ngoại trừ mỗi khi tôi nhập khẩu hoặc gọi một chức năng paramiko. Cảnh báo này sẽ hiển thị:Làm thế nào để chặn cảnh báo của bên thứ ba bằng cách sử dụng cảnh báo.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) 

Tôi biết rằng điều này phải làm với thực tế là Paramiko đang sử dụng một số chức năng không được chấp nhận của PyCrypto.

Câu hỏi của tôi là, có cách nào để ngăn chặn cảnh báo này theo chương trình không? Tôi đã thử này:

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

và ngay cả điều này:

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

trước khi 'nhập khẩu paramiko' tuyên bố và trước paramiko cụ thể chức năng cuộc gọi, nhưng không hoạt động. Cảnh báo này tiếp tục hiển thị bất kể điều gì. Nếu nó giúp, đây là mã trong thư viện của bên thứ ba mà in ra cảnh báo:

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

Nếu bạn biết một khoảng cách này, hãy giúp tôi đóng cảnh báo này.

Trả lời

28

Cách dễ nhất sẽ là các mô-đun cảnh báo cho thấy here:

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

Làm thế nào bạn sẽ sửa đổi này để chỉ lọc OP cảnh báo đặc biệt đề cập đến? – VF1

0

Để lọc chỉ là một cảnh báo cụ thể:

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

    #do something that raises a Warning 
Các vấn đề liên quan