#python #argparse
#python #argparse
Вопрос:
Я пишу CLI с сотнями аргументов и вложенных модулей на Python с помощью argparse. По понятным причинам я не хочу, чтобы все эти аргументы были собраны в одном файле python. Вместо этого я бы предпочел делегировать другим подмодулям и позволить пользователям добавлять свои собственные подмодули по желанию, которые будут автоматически обнаружены верхним уровнем argparser
.
В качестве примера у нас может быть каталог, который выглядит следующим образом:
- main.py
- foo.py
- bar.py
- baz/foo.py
...
Один допустимый вызов этого CLI будет:
./main.py foo --help
Это вызовет панель справки для argparse
модуля в foo.py
Другим примером может быть:
./main.py baz foo --help
что приведет к появлению панели справки для argparse
модуля baz/foo.py
.
И, наконец,:
./main.py --help
Напечатал бы что-то вроде:
Options are:
foo
bar
baz
Если вы еще не догадались, этот шаблон виден в kubectl
, который, кажется, неплохо организует множество опций.
Существует ли подобная библиотека или мне нужно создать свою собственную?
Комментарии:
1. ДА. Некоторые примеры для начала см. В ansible , где каждая подкоманда является модулем. Это не будет идеально соответствовать вашему примеру здесь (требование к вложенным пакетам / модулям необычно), но должно дать вам несколько мест для начала.
2. Похоже, они свернули свои собственные. Я надеялся на библиотеку, которая решала эту проблему в целом. Я знаю, что это не так много кода, но все помогает.
3. Это можно было бы сделать с
argparse
помощью функций вmain
и каждого скрипта, но вам придется выполнять большую часть работы по вызову соответствующих скриптов иsys.argv
соответствующим настройкам. Это слишком большая тема для обсуждения здесь.4. Имейте в виду
argparse
, что это в первую очередь инструмент синтаксического анализа, способ определения того, чего хочет ваш пользователь. Это не инструмент для выполнения или делегирования. Он анализируетsys.argv
и возвращаетargs
пространство имен. Вот и все (плюс некоторая проверка ошибок и форматирование справки).