Вопрос или проблема
В моем коде на Python я импортирую из scapy.all ARP, Ether, srp, ICMP, sr1, IP, но когда я запускаю свою программу, она выдает следующие ошибки:
WARNING: Wireshark установлен, но не может прочитать manuf!
C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\scapy\layers\ipsec.py:512: CryptographyDeprecationWarning: TripleDES был перемещен в cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES и будет удален из этого модуля в 48.0.0.
cipher=algorithms.TripleDES,
C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\scapy\layers\ipsec.py:516: CryptographyDeprecationWarning: TripleDES был перемещен в cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES и будет удален из этого модуля в 48.0.0.
cipher=algorithms.TripleDES,
Я думаю, что ошибка с wireshark связана с тем, что мне нужно загрузить файл manuf, но для остальных я не знаю, как убрать их из вывода, я просто хочу получить чистый вывод.
Я пробовал несколько вариантов warnings.filterwarnings(), чтобы удалить ошибки из вывода, но ничего не сработало. Вот как я пробовал filterwarnings:
from cryptography.utils import CryptographyDeprecationWarning
warnings.filterwarnings("ignore", category=CryptographyDeprecationWarning)
warnings.filterwarnings("ignore")
original_stderr = sys.stderr
sys.stderr = open(os.devnull, 'w')
sys.stderr.close() sys.stderr = original_stderr
warnings.filterwarnings("ignore", category=UserWarning)
warnings.filterwarnings("ignore", category=DeprecationWarning)
Ответ или решение
Чтобы отключить предупреждения, выводимые в консоль в вашем коде на Python, можно использовать модуль warnings
и перенаправить стандартный поток ошибок. Ниже приведён детальный подход для достижения чистого вывода, как вы и хотели.
Шаг 1: Отключение предупреждений с использованием модуля warnings
Вы можете использовать функцию filterwarnings
для игнорирования определённых категорий предупреждений. В вашем случае это могут быть CryptographyDeprecationWarning
, UserWarning
и DeprecationWarning
.
Вот как может выглядеть ваш код:
import warnings
import os
import sys
# Отключайте предупреждения
warnings.filterwarnings("ignore", category=UserWarning)
warnings.filterwarnings("ignore", category=DeprecationWarning)
warnings.filterwarnings("ignore", category=CryptographyDeprecationWarning)
# Перенаправляйте stderr
original_stderr = sys.stderr
sys.stderr = open(os.devnull, 'w')
try:
from scapy.all import ARP, Ether, srp, ICMP, sr1, IP
finally:
# Восстановление stderr
sys.stderr.close()
sys.stderr = original_stderr
Шаг 2: Устранение предупреждения о Wireshark
Предупреждение о том, что Wireshark установлен, но не может читать файл manuf
, скорее всего, связано с отсутствием необходимого файла. Чтобы избежать этого предупреждения, вы можете просто проигнорировать его, как и другие предупреждения или просто установить нужный файл, если это важно для вашей работы.
Шаг 3: Тестирование решения
Протестируйте код выше и убедитесь, что все предупреждения более не отображаются. Если вы всё ещё видите какие-либо сообщения, убедитесь, что они относятся к тем категориям предупреждений, которые вы пытались игнорировать. В противном случае вы можете добавить дополнительные категории.
Заключение
Таким образом, с помощью вышеописанных шагов вы сможете отключить большинство предупреждений, которые могут мешать вашему выводу. Если у вас возникнут дополнительные вопросы или потребуется помощь с другими аспектами вашего проекта, не стесняйтесь обращаться!