Этот ответ предполагает 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 для объединения команд. Это не то, что я могу легко объяснить в нескольких строках, но не стесняйтесь просматривать в моем репозитории для основного класса, а также класс, который его использует, и параметр parser