Автовывод сообщения с argparse в Python без аргументов
Быстрый ответ
Чтобы по умолчанию активировать сообщение помощи argparse при запуске скрипта без аргументов, воспользуйтесь ниже приведённым кодом:
import argparse, sys
class ArgumentParserError(Exception): pass
class EnhancedArgParser(argparse.ArgumentParser):
def error(self, message):
self.print_help()
raise ArgumentParserError(message)
parser = EnhancedArgParser()
parser.add_argument('action', help='обязательное действие')
try:
args = parser.parse_args(sys.argv[1:]) or parser.error("Аргументы не были заданы! 🙀")
except ArgumentParserError:
sys.exit(2) # Завершение работы скрипта с выводом сообщения о том, что процесс не был завершен корректно.
Этот пример демонстрирует создание кастомного парсера, используя наследование от argparse.ArgumentParser
. Вставляется специальное исключение для случаев, когда не заданы аргументы. Блок try-except
гарантирует, что сообщение помощи будет отображено корректно и что программа будет безошибочно завершена.
Проработка принципа работы: argparse и обработка ошибок
Предположения argparse
Модуль argparse ожидает хотя бы одного аргумента, переданного через командную строку. Если пользователь забудет предоставить аргументы, модуль корректно отобразит сообщение с помощью.
Обдуманные уловки с ошибками в argparse
В своем исходном состоянии argparse
выдаст сообщение об ошибке и пояснение по применению команды в случае несовпадения аргументов с его ожиданиями. Тем не менее, возможна кастомизация его функциональности: для этого можно создать подкласс ArgumentParser
, в котором заменить метод error
на вызов функции print_help
.
Идеальная отмена с использованием sys.exit(2)
Применение sys.exit(2)
гарантирует завершение работы скрипта с возвращением кода ошибки, причём это произойдёт только после вывода сообщения помощи. Код 2
означает, что work-flow был выполнен, но результат его работы был неудовлетворительным для скрипта.
Ловушки и подводные камни: за рамками стандартной работы с ошибками в argparse
Прокрутка argparse с использованием субпарсеров
Использование функции add_subparsers()
может усложнить управление набором команд. В таких случаях использование значения по умолчанию в set_defaults
допускает задание конкретного действия для случая вызова субпарсера без аргументов.
Пропущенные позиционные аргументы: залы обмана
Ошибки, связанные с отсутствующими позиционными аргументами, могут быть запутанными. Для их определения следует использовать блок try-except
вокруг parse_args
. Это позволит перехватывать исключение ArgumentParserError
и гарантировать качественный вывод сообщения помощи.
Отделка скрипта: выпуск под ключ
Вывод краткого справочника с помощью print_usage
Иногда полное руководство лишнее, и достаточно только краткого справочника. ArgumentParser.print_usage()
предоставляет короткое описание структуры команд без детальных характеристик и полного текста сообщения помощи.
Значения по умолчанию: безопасная сеть для argparse
Настройки по умолчанию в parse_args
могут служить в качестве условия для проверки аргументов в блоке if-else. Это делает скрипт более адаптивным и дружелюбным к пользователю в случае отсутствия ввода аргументов.
Коды завершения: последний аккорд интерактивности
Правильно настроенный sys.exit
выдаёт адекватный код завершения, который отражает состояние скрипта, наглядно сообщая о его текущем статусе, как полицейский, регулирующий движение на светофоре.
Визуализация
Представьте себе работу модуля argparse, который требует помощи, при отсутствии указания аргументов в скрипте:
Ваш скрипт напоминает милого щенка 🐶...
Без аргументов = Нет игрушки для жевания 🦴
В итоге щенок (скрипт) огорчен отсутствием игрушки (аргументов).
if no args: # Если у щенка нет игрушки...
parser.print_help() # ...скажите о своей потребности в помощи!
Теперь возникшую потребность можно удовлетворить, принеся игрушку для жевания и помогая щенку развернуться полностью.
Игрушка для жевания 🦴 -> Щенок 🐶: обрадовался и готов демонстрировать свои умения!
📜 Теперь щенок готов показать все, что умеет!
Хранилище советов и приёмов
Значения по умолчанию: верный рыцарь
Определение действия по умолчанию через set_defaults()
можно сравнить с наёмником в блестящих латах, который обеспечит необходимую функциональность скрипту даже при отсутствии входных данных.
«Радар» в виде sys.argv
С помощью sys.argv
вы можете, как радар, проверять, не пуст ли вызов скрипта, и при необходимости выводить инструкции по его использованию.
Симфоническая партия parse_args()
Подходите к parse_args()
как к дирижёру оркестра — расшифруйте суть пользовательского ввода и направляйте его с помощью сообщения помощи, создавая гармоничный интерфейс командной строки.
Полезные материалы
- argparse — Парсер аргументов командной строки в Python 3.12.2 — в официальной документации Python подробно описывается использование модуля argparse.
- Вывод сообщения помощи используя argparse в Python при вызове скрипта без аргументов — Stack Overflow — на Stack Overflow обсуждается возможность изменения стандартного поведения модуля argparse.
- Создание интерфейсов командной строки с использованием argparse в Python — Real Python — с подробным руководством от Real Python вы познаете все нюансы создания интерфейсов командной строки с использованием argparse.
- argparse — Работа с аргументами командной строки — PyMOTW 3 — в руководстве PyMOTW проиллюстрирована работа с опциональными аргументами, а также приведены другие особенности использования argparse.
- Самоучитель по использованию argparse — Документация Python 3.12.2 — получите базовые знания об использовании модуля argparse, следуя официальным учебным руководствам Python.
- Автоматизация рутинных задач с Python — в этой главе обсуждается автоматизация задач с использованием Python и особенности работы с аргументами командной строки.