getopt — Парсер командной строки в стиле C
Исходный код: Lib/getopt.py
Примечание
Модуль getopt представляет собой парсер командной строки, API которого разработан для пользователей, знакомых с функцией C getopt(). Пользователи, не знакомые с функцией C getopt() или желающие написать меньше кода и получить лучшую помощь и сообщения об ошибках, должны рассмотреть использование модуля argparse вместо него.
Этот модуль помогает скриптам анализировать аргументы командной строки в sys.argv. Он поддерживает те же соглашения, что и функция Unix getopt() (включая специальные значения аргументов вида ‘-‘ и ‘--‘). Также могут использоваться длинные опции, аналогичные тем, которые поддерживаются программным обеспечением GNU, через необязательный третий аргумент.
Этот модуль предоставляет две функции и исключение:
-
getopt.getopt(args, options[, long_options]) -
Парсит опции командной строки и список параметров. args — список аргументов для парсинга, без ведущей ссылки на выполняемую программу. Обычно это означает
sys.argv[1:]. options — строка букв опций, которые скрипт хочет распознавать, при этом опции, требующие аргумента, следуют за двоеточием (':'; т.е., используется тот же формат, что и в Unixgetopt()).Примечание
В отличие от GNU
getopt(), после не-опционального аргумента все последующие аргументы также считаются не-опциональными. Это аналогично тому, как работают не-GNU Unix-системы.Если задан long_options, он должен быть списком строк с именами длинных опций, которые должны поддерживаться. Ведущие
'--'символы не должны включаться в имя опции. Длинные опции, требующие аргумента, должны следовать за знаком равенства ('='). Необязательные аргументы не поддерживаются. Чтобы принять только длинные опции, options должна быть пустой строкой. Длинные опции в командной строке распознаются, если они предоставляют префикс имени опции, точно совпадающий с одной из принимаемых опций. Например, если long_options — это['foo', 'frob'], опция--foбудет соответствовать как--foo, но--fне будет соответствовать однозначно, поэтому будет поднято исключениеGetoptError.Значение возврата состоит из двух элементов: первый — список пар «опция-значение»; второй — список аргументов программы, оставшихся после удаления списка опций (это отступящий срез args). Каждая пара «опция-значение», возвращаемая значением, имеет опцию в качестве первого элемента, с префиксом дефиса для коротких опций (например,
'-x') или двумя дефисами для длинных опций (например,'--long-option') и аргумент опции в качестве второго элемента, или пустую строку, если опция не имеет аргумента. Опции появляются в списке в том же порядке, в котором они были найдены, что позволяет иметь несколько вхождений. Короткие и длинные опции могут быть смешаны.
-
getopt.gnu_getopt(args, options[, long_options]) -
Эта функция работает так же, как
getopt(), за исключением того, что режим сканирования в стиле GNU используется по умолчанию. Это означает, что аргументы опций и не-опций могут быть перемешаны. Функцияgetopt()прекращает обработку опций, как только встречается аргумент, не являющийся опцией.Если первый символ строки опций —
'+', или если переменная средыPOSIXLY_CORRECTустановлена, то обработка опций прекращается, как только встречается аргумент, не являющийся опцией.Введено в версии 2.3.
-
exception getopt.GetoptError -
Это исключение поднимается, когда в списке аргументов встречается нераспознанная опция или когда опции, требующей аргумента, не предоставлено значение. Аргумент исключения — строка, указывающая причину ошибки. Для длинных опций аргумент, предоставленный опции, которая его не требует, также вызовет поднятие этого исключения. Атрибуты
msgиoptсодержат сообщение об ошибке и связанную опцию; если нет конкретной опции, с которой связано исключение, тоopt— пустая строка.Изменено в версии 1.6: Введено
GetoptErrorкак синоним дляerror.
-
exception getopt.error -
Псевдоним для
GetoptError; для обратной совместимости.
Пример с использованием только опций в стиле Unix:
>>> import getopt
>>> args = '-a -b -cfoo -d bar a1 a2'.split()
>>> args
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'abc:d:')
>>> optlist
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
>>> args
['a1', 'a2']
Использование длинных имён опций также просто:
>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args = s.split()
>>> args
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'x', [
... 'condition=', 'output-file=', 'testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]
>>> args
['a1', 'a2']
В скрипте типичное использование выглядит примерно так:
import getopt, sys
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
except getopt.GetoptError as err:
# print help information and exit:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)
output = None
verbose = False
for o, a in opts:
if o == "-v":
verbose = True
elif o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-o", "--output"):
output = a
else:
assert False, "unhandled option"
# ...
if __name__ == "__main__":
main()
Обратите внимание, что эквивалентный интерфейс командной строки можно создать с меньшим объёмом кода и более информативными сообщениями об ошибках и справке, используя модуль argparse:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-o', '--output')
parser.add_argument('-v', dest='verbose', action='store_true')
args = parser.parse_args()
# ... do something with args.output ...
# ... do something with args.verbose ..
См. также
-
Moduleargparse -
Альтернативная библиотека для парсинга опций и аргументов командной строки.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/getopt.html