Как отключить предупреждения в выводе Python?

Вопрос или проблема

В моем коде на 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: Тестирование решения

Протестируйте код выше и убедитесь, что все предупреждения более не отображаются. Если вы всё ещё видите какие-либо сообщения, убедитесь, что они относятся к тем категориям предупреждений, которые вы пытались игнорировать. В противном случае вы можете добавить дополнительные категории.

Заключение

Таким образом, с помощью вышеописанных шагов вы сможете отключить большинство предупреждений, которые могут мешать вашему выводу. Если у вас возникнут дополнительные вопросы или потребуется помощь с другими аспектами вашего проекта, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...