导入模块时禁止scapy警告消息

use*_*990 13 python scapy hide stderr output

我正在编写一个小脚本,使用scapy收集一些信息,然后返回一些xml代码,我将传递给metasploit的xmlrpc接口.我希望我的脚本只返回xml,没有其他警告等.

我可以通过在verbose=0sr1命令中添加选项来抑制大多数scapy输出.我在每个输出之前仍然得到的,并且我假设它在我加载模块时返回此警告,是:

警告:找不到IPv6目标的路由::(没有默认路由?)

通过调用我的脚本,我可以轻松地重定向该输出:

 ./myscript 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

但我想将其纳入脚本中.为此,我找到了一个提示,一个可以有一个NullDevice类,它不会写任何东西,然后设置sys.stderr为该NullDevice类的实例化.

这只在我已经加载模块后不幸地工作,所以我仍然有警告,它只重定向发送到stderr的任何后续消息.

如何禁止显示在屏幕上的警告消息?

hal*_*lex 32

您可以通过添加以下内容来消除scapy的警告:

logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
Run Code Online (Sandbox Code Playgroud)

导入Scapy 之前.这将禁止所有具有较低严重性的消息而不是错误消息.


例如:

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
...
Run Code Online (Sandbox Code Playgroud)