#python #pyshark
#python #pyshark
Вопрос:
У меня есть блок кода, который считывает ICMP-пакеты из PyShark. Нравится :
capture = pyshark.LiveCapture(interface=self.networkInterface)
packet_generator = capture.sniff_continuously()
while True:
if self.exitProgram:
try:
raise pyshark.capture.capture.StopCapture()
except Exception as e:
print("Stopping ICMP Listener")
break
try:
print("Look if there is Packet")
packet = next(packet_generator)
handlePacket(packet)
except:
print("No Packet")
sleep(0.25)
Метод capture.sniff_continuously
возвращает генератор. Когда создается ICMP-пакет, он перехватывает его и отправляет handlePacket
, но когда этого не происходит, я ожидаю вывода типа,
Look if there is Packet
No Packet
Однако он просто печатает Look if there is Packet
и ожидает, чего я не хочу. Как поддерживать его работу с заданным циклом и проверять, прибыл ли пакет или нет?
Комментарии:
1. Можете ли вы попробовать исключить последний оператор except? Вы получаете сообщение об ошибке, если пакета нет, а оператор закомментирован?
2. Большое вам спасибо за интерес. Я попытался удалить блок try except и просто вызвать packet = next(packet_generator) . И оператор печати после этого. Я не получил ошибки исключения, и текст внутри печати НЕ печатается.
3. Глядя на желаемый результат, вы в настоящее время ожидаете ошибки, если нет доступного пакета (поскольку это единственный случай, когда выполняется оператор except). Самый простой способ исправить это, вероятно, просто отказаться от этого и написать другой оператор if