Как разбирать аргументы командной строки в Python?
Возможный дубликат:
Каков наилучший способ захвата/разбора аргументов командной строки, переданных на Python script?
Я хотел бы иметь возможность разбирать аргументы командной строки в моей программе Python 2.6.
В идеале я хочу иметь возможность обрабатывать эти случаи:
# Show some help
./myprogram --help
# These are equivalent
./myprogram --block=1
./myprogram -b 1
# This means verbose, and twice as verbose:
./myprogram -v
./myprogram -vv
Ответы
Ответ 1
Проверьте argparse модуль (или optparse для более старых версий Python).
Обратите внимание, что argparse
/optparse
- это новые, лучшие замены для getopt
, поэтому, если вы новичок в этом, это рекомендуемый вариант. Из getopt
docs:
Примечание. Модуль getopt представляет собой синтаксический анализатор для параметров командной строки, API которых предназначен для того, чтобы быть знакомым пользователям функции C getopt(). Пользователи, которые не знакомы с функцией C getopt() или кто хочет писать меньше кода и получать более эффективные справки и сообщения об ошибках, должны рассмотреть возможность использования модуля argparse.
Ответ 2
У Python встроена обработка аргументов, с getopt
.
Он может обрабатывать длинные и короткие формы аргументов, а также "голые" и параметризованные версии (--help
versus --num=7
).
Для ваших конкретных случаев использования (с немного больше) вы, вероятно, будете смотреть на что-то вроде:
opts,args = getopt.getopt(argv,"b:vVh",["block=", "verbose", "very-verbose", "help"])
Я не уверен в верхней части головы, если он допускает многосимвольные варианты с одним дефем, например -vv
. Я бы просто использовал -v
и -v
для облегчения моей жизни.
Ответ 3
Лучшим вариантом, чем эта ссылка, являются модули OptParse или GetOpt, и в зависимости от того, какая версия Python вы используете, новейшие версии..2.7 и 3.1.2 имеют еще более новый модуль. Документация на официальной ссылке python.org имеется очень информативный набор документации и примеры для этих модулей. Если вы перейдете на python.org и просто выполните быстрый поиск OptParse или GetOpt, у вас будет все, что вам нужно.
Ответ 4
optfunc - интересный небольшой модуль. Это здорово, если вы хотите быстро написать немного script. Для больших вещей я бы пошел с argparse, как писали другие.
Ответ 5
Возможно, будет лучший способ, но я бы просто использовал sys.argv и помещал в условные выражения везде, где это необходимо.
if '--v' or '--vv' in sys.argv :
print 'verbose message'