Python 使用嗅探功能时未捕获键盘中断

Python 使用嗅探功能时未捕获键盘中断,python,multithreading,scapy,keyboardinterrupt,Python,Multithreading,Scapy,Keyboardinterrupt,每当有键盘中断时,我都试图清空列表,但这不起作用。下面是我的代码 while 1: try: n=0 while n<10: pkt=sniff(prn=lambda x:x.sprintf("{Ether : %ether.src% --> %ether.dst%}"),timeout=1,store=1) buffpkt+=pkt[:] ##Store packets in a list buffe

每当有键盘中断时,我都试图清空列表,但这不起作用。下面是我的代码

while 1:
    try:
       n=0
       while n<10:
           pkt=sniff(prn=lambda x:x.sprintf("{Ether : %ether.src% --> %ether.dst%}"),timeout=1,store=1)
           buffpkt+=pkt[:]  ##Store packets in a list buffer
           n+=1
       self._tempbuffstore(buffpkt)

    except KeyboardInterrupt:
        buffpkt=[]  ##Flush the list asynchronously "THIS IS THE MAIN REQUIREMENT FOR INTERRUPT"
        raise
而1:
尝试:
n=0

而n看起来你对“嗅探”的调用是阻塞的,我无法复制它。与网络相关的方法非常常见


您应该将sniff方法放在一个单独的线程中,然后,就可以在主循环中处理您的异常(并且您还必须处理在异常时停止线程)。

不太具体。你期待什么?你得到了什么?当我在shell中启动它时,它不会捕获中断,总是嗅探数据包并存储它。我希望它在中断发生时刷新列表。我已经在线程中有了嗅探功能。但是我想通过键盘中断来清除线程功能中的缓冲区。更干净的方法是使用模块。您可以在单独的线程中打印日志,该线程与读取网络的线程相同。考虑下一次使代码可用于其他线程;)@sHoM:像SIGINT这样的信号是由Python中的主线程接收的,因此,如果问题中的代码没有在主线程中执行,那么它永远不会接收
键盘中断。