Я изначально программист на Си. Я видел множество трюков и «хаков», чтобы прочитать много разных аргументов.
Как программисты Python могут это сделать?
связанные с
- Каков наилучший способ получить / проанализировать аргументы командной строки, передаваемые скрипту Python?
- Реализовываете интерфейсы командной строки в стиле «[команда] [действие] [параметр]»?
- Как я могу обработать аргументы командной строки в Python?
- Как мне отформатировать позиционный аргумент, используя optparse в Python?
Ответы:
Каноническое решение в стандартной библиотеке
argparse
( документы ):Вот пример:
argparse
поддерживает (среди прочего):источник
optparse
это устарело, задающий вопрос больше не является участником переполнения стека, и это является общепринятым ответом на очень заметный вопрос - пожалуйста, рассмотрите возможность полностью переписать пример кода, чтобыargparse
вместо него использовать stdlib .sys.argv
список, содержащий все аргументы, переданные сценарию в командной строкеВ принципе,
источник
sys.argv[1:]
(избегая имени скрипта).Просто ходить по евангелизации для argparse, который лучше по этим причинам .. по существу:
(скопировано по ссылке)
Модуль argparse может обрабатывать позиционные и необязательные аргументы, тогда как optparse может обрабатывать только необязательные аргументы
argparse не является догматичным, как должен выглядеть ваш интерфейс командной строки - поддерживаются такие параметры, как -file или / file, а также обязательные параметры. Optparse отказывается поддерживать эти функции, предпочитая чистоту практичности
argparse создает более информативные сообщения об использовании, включая использование командной строки, определенное из ваших аргументов, и сообщения помощи как для позиционных, так и для необязательных аргументов. Модуль optparse требует от вас написать собственную строку использования и не имеет возможности отображать справку для позиционных аргументов.
argparse поддерживает действие, которое использует переменное число аргументов командной строки, в то время как optparse требует, чтобы точное количество аргументов (например, 1, 2 или 3) было известно заранее.
argparse поддерживает парсеры, которые отправляют подкоманды, в то время как optparse требует установки
allow_interspersed_args
и выполнения парсера вручнуюИ мой личный фаворит:
add_argument()
с помощью простых вызываемых элементов, в то время как optparse требует взлома таких атрибутов класса, какSTORE_ACTIONS
или,CHECK_METHODS
для правильной проверки аргументов.источник
-f
или--foo
, в то время как «точное количество аргументов должно быть известно заранее», предположительно, означают позиционные аргументы, заданные без каких-либо предшествующих флагов опций.Существует также
argparse
модуль stdlib («улучшение» вoptparse
модуле stdlib ). Пример из введения в argparse :Применение:
источник
Один из способов сделать это - использовать
sys.argv
. Это напечатает имя скрипта в качестве первого аргумента и все остальные параметры, которые вы передаете ему.источник
Библиотека Docopt действительно гладкая. Он создает аргумент dict из строки использования для вашего приложения.
Например, из документа docopt:
источник
Если вам нужно что-то быстрое и не очень гибкое
main.py:
Тогда беги
python main.py James Smith
произвести следующий вывод:
источник
python main.py "James Smith"
что ставитJames Smith
вsys.argv[1]
и производит ,IndexError
когда вы пытаетесь использовать несуществующийsys.argv[2]
. Поведение цитирования будет в некоторой степени зависеть от того, с какой платформы и оболочки вы запускаете Python.python main.py "James Joseph Smith"
? Если вас интересует индекс за пределами границ, вы можете добавить проверку на количество предоставленных аргументов. Менее реалистично или нет, мой пример показывает, как обрабатывать несколько аргументов.gmail-trash-msg.py MessageID
. Этот ответ прост, чтобы тестовыйMessageID
параметр был переданsys.argv[1]
.источник
Я сам использую optparse, но мне действительно нравится направление, в котором движется Саймон Виллисон со своей недавно представленной библиотекой optfunc . Работает:
Так, например, это определение функции:
превращается в этот необязательный текст справки:
источник
Мне нравится getopt из stdlib, например:
В последнее время я добавлял к этому что-то похожее, чтобы сделать вещи менее многословными (например, сделать «-h» неявным).
источник
Pocoo в щелчке более интуитивный, требует меньше шаблонного, и, по крайней мере , как мощные , как argparse.
Единственная слабость, с которой я сталкивался до сих пор, это то, что вы не можете много настраивать, чтобы помочь страницам, но обычно это не является обязательным требованием, и docopt кажется очевидным выбором, когда это так.
источник
Как вы можете видеть, optparse «Модуль optparse устарел и не будет дальше разрабатываться; разработка продолжится с модулем argparse ».
источник
источник
Вас может заинтересовать небольшой модуль Python, который я написал, чтобы сделать обработку аргументов командной строки еще проще (с открытым исходным кодом и бесплатное использование) - Commando
источник
Я рекомендую смотреть на docopt как на простую альтернативу этим другим.
docopt - это новый проект, который работает, анализируя ваше сообщение об использовании --help, а не требует, чтобы вы все реализовали самостоятельно. Вы просто должны поместить свое сообщение об использовании в формате POSIX.
источник
Еще один вариант это Argh . Он основан на argparse и позволяет писать такие вещи, как:
Он автоматически сгенерирует справку и т. Д., И вы можете использовать декораторы для предоставления дополнительных указаний о том, как должен работать анализ arg.
источник
argh
проще, чем другие библиотеки или использоватьsys
.argh
но он не особенно подходит для сценариев, в которых вы больше всего не хотите иметь команду с подкомандами.def frobnicate_spleches(...)
определение функции, которая делает все, что делает ваш скрипт, а затем делатьif __name__ == '__main__': argh.dispatch_command(frobnicate_spleches)
в конце файла.Мое решение - entrypoint2 . Пример:
текст справки:
источник