Какой самый простой , краткий и самый гибкий метод или библиотека для анализа аргументов командной строки Python?
Какой самый простой , краткий и самый гибкий метод или библиотека для анализа аргументов командной строки Python?
Этот ответ предполагает, optparse
что подходит для более старых версий Python. Для Python 2.7 и выше argparse
заменяет optparse
. Смотрите этот ответ для получения дополнительной информации.
Как отмечали другие люди, вам лучше использовать optparse вместо getopt. getopt в значительной степени является взаимно-однозначным отображением стандартных функций библиотеки getopt (3) C и не очень прост в использовании.
optparse, хотя и немного более многословный, гораздо лучше структурирован и его проще расширять в дальнейшем.
Вот типичная строка для добавления опции в ваш парсер:
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
Это в значительной степени говорит само за себя; во время обработки он принимает -q или --query в качестве параметров, сохраняет аргумент в атрибуте с именем query и имеет значение по умолчанию, если вы его не указали. Это также является самодокументированным, поскольку вы объявляете аргумент справки (который будет использоваться при запуске с -h / - help) прямо с опцией.
Обычно вы анализируете свои аргументы с помощью:
options, args = parser.parse_args()
По умолчанию это будет анализировать стандартные аргументы, передаваемые скрипту (sys.argv [1:])
Затем параметру options.query будет присвоено значение, которое вы передали в сценарий.
Вы создаете парсер просто
parser = optparse.OptionParser()
Это все основы, которые вам нужны. Вот полный скрипт Python, который показывает это:
import optparse
parser = optparse.OptionParser()
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
options, args = parser.parse_args()
print 'Query string:', options.query
5 строк Python, которые показывают основы.
Сохраните его в sample.py и запустите один раз с
python sample.py
и однажды с
python sample.py --query myquery
Кроме того, вы обнаружите, что optparse очень легко расширить. В одном из моих проектов я создал класс Command, который позволяет вам легко вкладывать подкоманды в дерево команд. Он использует optparse для объединения команд. Это не то, что я могу легко объяснить в нескольких строках, но не стесняйтесь просматривать в моем хранилище основной класс, а также класс, который его использует, и анализатор параметров
-mcProfile -o program.prof
но agrparcer захватывает эти аргументы, как передать эти аргументы в python exe ???argparse
это путь Вот краткое описание того, как его использовать:1) Инициализировать
2) Добавить аргументы
3) Разбор
4) Доступ
5) Проверьте значения
использование
Правильное использование:
Неверные аргументы:
Полная помощь:
источник
Используя docopt
С 2012 года появился очень простой, мощный и действительно классный модуль для разбора аргументов под названием docopt . Вот пример, взятый из его документации:
Итак, вот оно: 2 строки кода плюс ваша строка документа, что очень важно, и ваши аргументы анализируются и становятся доступными в вашем объекте аргументов.
Использование Python-Fire
С 2017 года появился еще один классный модуль под названием python-fire . Он может генерировать интерфейс CLI для вашего кода, когда вы выполняете разбор нулевого аргумента. Вот простой пример из документации (эта небольшая программа предоставляет функцию
double
в командной строке):Из командной строки вы можете запустить:
источник
Новый модный путь
argparse
по этим причинам. argparse> optparse> getoptобновление: с py2.7 argparse является частью стандартной библиотеки, а optparse устарела.
источник
Я предпочитаю Click . Он абстрагирует параметры управления и позволяет «(...) создавать красивые интерфейсы командной строки с возможностью компоновки с минимальным количеством кода».
Вот пример использования:
Он также автоматически генерирует красиво отформатированные страницы справки:
источник
Практически все используют getopt
Вот пример кода для документа:
Одним словом, вот как это работает.
У вас есть два типа вариантов. Те, кто получает аргументы, и те, кто просто как переключатели.
sys.argv
в значительной степени вашchar** argv
в C. Как и в C вы пропустите первый элемент, который является именем вашей программы и анализирует только аргументы:sys.argv[1:]
Getopt.getopt
проанализирует его в соответствии с правилом, которое вы даете в аргументе."ho:v"
Здесь описаны краткие аргументы:-ONELETTER
. В:
означает , что-o
принимает один аргумент.Наконец
["help", "output="]
описывает длинные аргументы (--MORETHANONELETTER
).=
После вывода еще раз означает , что выход принимает один аргументы.Результатом является список пары (опция, аргумент)
Если опция не принимает никакого аргумента (как
--help
здесь),arg
часть является пустой строкой. Затем вы обычно хотите зациклить этот список и проверить имя опции, как в примере.Я надеюсь, что это помогло вам.
источник
getopt
версий Python этот ответ устарел.getopt
все еще не считается устаревшим… Но в его документации говорится, что он в основном предназначен для пользователей, знакомых сgetopt()
функцией C , и признает, что для других пользователейargparse
может быть лучшим решением, позволяющим «писать меньше кода и получать Лучшая помощь и сообщения об ошибках ".Используйте
optparse
который поставляется со стандартной библиотекой. Например:Источник: Использование Python для создания инструментов командной строки UNIX
Однако, начиная с Python 2.7, optparse устарела, см .: Зачем использовать argparse, а не optparse?
источник
Только в случае , если вы , возможно , потребуется, это может помочь , если вам нужно захватить аргументы Юникода Win32 (2K, XP и т.д.):
источник
Облегченный аргумент командной строки по умолчанию
Хотя
argparse
это замечательно и является правильным ответом для полностью документированных переключателей командной строки и расширенных функций, вы можете использовать значения по умолчанию для аргументов функции, чтобы очень просто обрабатывать прямые позиционные аргументы.Аргумент 'name' фиксирует имя скрипта и не используется. Тестовый вывод выглядит так:
Для простых скриптов, где я просто хочу некоторые значения по умолчанию, я нахожу это вполне достаточным. Возможно, вы также захотите включить приведение типа в возвращаемые значения, иначе значения командной строки будут строками.
источник
Я предпочитаю optparse, чтобы getopt. Это очень декларативно: вы сообщаете ему названия опций и эффекты, которые они должны иметь (например, установка логического поля), и он возвращает вам словарь, заполненный в соответствии с вашими спецификациями.
http://docs.python.org/lib/module-optparse.html
источник
Я думаю, что лучший способ для более крупных проектов - это optparse, но если вы ищете легкий путь, возможно, http://werkzeug.pocoo.org/documentation/script вам подойдет.
Таким образом, в основном каждая функция action_ * доступна для командной строки, и хорошее вспомогательное сообщение генерируется бесплатно.
источник
declarative_parser
. Конечно, если вы работаете с werkzeug, лучше сохранитьwerkzung.script
. Во всяком случае, я большой поклонник такого подхода.Argparse-код может быть длиннее, чем фактический код реализации!
Вот проблема, которую я нахожу с большинством популярных вариантов разбора аргументов, заключается в том, что если ваши параметры являются лишь скромными, то код для их документирования становится непропорционально большим, что приносит им пользу.
Относительно новичок в сцене разбора аргументов (я думаю) - это plac .
Он делает некоторые признанные компромиссы с argparse, но использует встроенную документацию и просто оборачивает
main()
функцию типа type:источник
consoleargs заслуживает упоминания здесь. Он очень прост в использовании. Проверьте это:
Теперь в консоли:
источник
Вот метод, а не библиотека, которая, кажется, работает для меня.
Цели здесь должны быть краткими, каждый аргумент анализируется одной строкой, аргументы выстраиваются для удобства чтения, код прост и не зависит от каких-либо специальных модулей (только os + sys), изящно предупреждает об отсутствующих или неизвестных аргументах , используйте простой цикл for / range () и работает через python 2.x и 3.x
Показаны два переключателя (-d, -v) и два значения, управляемых аргументами (-i xxx и -o xxx).
Целью NextArg () является возвращение следующего аргумента при проверке на отсутствие данных, а «skip» пропускает цикл при использовании NextArg (), сохраняя при этом флаг, разбирающий до одной строки.
источник
Я расширил подход Эрко, чтобы учесть необходимые позиционные аргументы и необязательные аргументы. Они должны предшествовать аргументам -d, -v и т. Д.
Позиционные и необязательные аргументы могут быть получены с помощью PosArg (i) и OptArg (i, по умолчанию) соответственно. При обнаружении необязательного аргумента начальная позиция поиска параметров (например, -i) перемещается на 1 вперед, чтобы избежать «неожиданного» фатального исхода.
источник