LINUX.ORG.RU

Как работают python -W и PYTHONWARNINGS?

 


0

1

Есть заблокированный сайт. Есть прокси, который быстрый и доступный, потому что делает что-то нехорошее с HTTPS-трафиком. Есть программа gallery-dl, которая может скачать с сайта всё, интересующее меня. Но когда прокси подсовывает самоподписанный сертификат вместо настоящего, она сыпет предупреждениями InsecureRequestWarning, среди которых теряются реальные ошибки. Но и первое появление InsecureRequestWarning тоже желательно видеть.

Как я понял https://docs.python.org/3/using/cmdline.html#cmdoption-w , такую проблему можно исправить, запуская питон с ключом -W и параметром once::InsecureRequestWarning. А https://docs.python.org/3/using/cmdline.html#envvar-PYTHONWARNINGS говорит, что можно эти параметры перечислить через запятую в переменной PYTHONWARNINGS. Попробовал:

$ export PYTHONWARNINGS='once::InsecureRequestWarning'
$ gallery-dl --cookies ... --proxy ... --no-check-certificate --download-archive ... <URLы>
Invalid -W option ignored: unknown warning category: 'InsecureRequestWarning'
[1/22] https://...
[modulename][info] no username given; using modulename.org
/usr/lib/python3.9/site-packages/urllib3/connectionpool.py:1043: InsecureRequestWarning: Unverified HTTPS request is being made to host 'qwertyu.lkjhgfdsamnb.zxcv.network'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
  warnings.warn(

Вопрос: почему не опознаётся категория? Как отключить эти предупреждения? Помимо голого «once».

P.S. Запустить python -m gallery-dl нельзя, так как там отсутствует __main__, поэтому оно запускается скриптом-обёрткой.

Ответ: для обработки проблем в библиотеках ничего лучше фильтрования по началу текста ошибки не предложили: $ export PYTHONWARNINGS='once:Unverified HTTPS request'

★★★★★

Последнее исправление: question4 (всего исправлений: 2)

Категория является библиотечной, если быть точнее, то urllib3.

...
Invalid -W option ignored: unknown warning category: 'InsecureRequestWarning'
...
/usr/lib/python3.9/site-packages/urllib3/connectionpool.py:1043: InsecureRequestWarning: Unverified ...

А доступные категории для -W перечислены в https://docs.python.org/3/library/warnings.html#warning-categories.

Так как ворнинг библиотечный, я думаю что нужно сделать так:

$ export PYTHONWARNINGS='once::InsecureRequestWarning:urllib3'
MrBackToPython
()
Ответ на: комментарий от HerrWeigel

Сработать должно, в документации говорится о начале текста сообщения:

message is a string containing a regular expression that the start of the warning message must match, case-insensitively

MrBackToPython
()
Ответ на: комментарий от MrBackToPython

Точно, работает. Проверил сейчас. Там просто есть и такая строчка:

The message field must match the whole warning message; this match is case-insensitive.

HerrWeigel ★★★★
()
17 февраля 2023 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.