getopt — парсер параметров командной строки в стиле C
Исходный код: Lib/getopt.py
Примечание
Модуль getopt предназначен для разбора параметров командной строки. Его API разработан так, чтобы быть знакомым пользователям функции C getopt(). Пользователям, незнакомым с функцией C getopt(), а также тем, кто хочет писать меньше кода и получать более подробные справочные сообщения и сообщения об ошибках, следует рассмотреть возможность использования вместо него модуля argparse.
Этот модуль помогает скриптам разбирать аргументы командной строки в sys.argv. Он поддерживает те же соглашения, что и функция Unix getopt() (включая особое значение аргументов вида «-» и «--«). Также можно использовать длинные параметры, подобные тем, которые поддерживаются программным обеспечением GNU, передав необязательный третий аргумент.
Этот модуль предоставляет две функции и исключение:
-
getopt.getopt(args, shortopts, longopts=[]) -
Разбирает параметры командной строки и список параметров. args — список аргументов для разбора без ссылки на запущенную программу в начале. Обычно это означает
sys.argv[1:]. shortopts — строка букв параметров, которые должен распознавать скрипт; за параметрами, требующими аргумент, следует двоеточие (':'; то есть используется тот же формат, что и в Unixgetopt()).Примечание
В отличие от GNU
getopt(), после аргумента, не являющегося параметром, все последующие аргументы также считаются не являющимися параметрами. Так же работают системы Unix, не основанные на GNU.Если задан параметр longopts, он должен быть списком строк с именами поддерживаемых длинных параметров. В начало имени параметра не следует добавлять символы
'--'. После длинных параметров, требующих аргумент, должен следовать знак равенства ('='). Необязательные аргументы не поддерживаются. Чтобы принимать только длинные параметры, shortopts должен быть пустой строкой. Длинные параметры командной строки распознаются, если они содержат префикс имени параметра, точно совпадающий ровно с одним из поддерживаемых параметров. Например, если longopts —['foo', 'frob'], параметр--foбудет распознан как--foo, а--fне будет однозначно соответствовать ни одному параметру, поэтому будет возбуждено исключениеGetoptError.Возвращаемое значение состоит из двух элементов: первый — список пар
(option, value); второй — список аргументов программы, оставшихся после удаления списка параметров (это конечный срез args). В каждой возвращаемой паре параметр и его значение представлены следующим образом: первым элементом является параметр с дефисом перед коротким параметром (например,'-x') или с двумя дефисами перед длинным параметром (например,'--long-option'), а вторым — аргумент параметра либо пустая строка, если параметр не имеет аргумента. Параметры в списке расположены в том же порядке, в котором они были обнаружены, поэтому допускаются повторные вхождения. Можно использовать сочетание длинных и коротких параметров.
-
getopt.gnu_getopt(args, shortopts, longopts=[]) -
Эта функция работает так же, как
getopt(), но по умолчанию использует режим разбора в стиле GNU. Это означает, что параметры и аргументы, не являющиеся параметрами, могут перемежаться. Функцияgetopt()прекращает обработку параметров, как только встречает аргумент, не являющийся параметром.Если первый символ строки параметров —
'+'или задана переменная окруженияPOSIXLY_CORRECT, обработка параметров прекращается сразу после обнаружения аргумента, не являющегося параметром.
-
exception getopt.GetoptError -
Это исключение возбуждается, если в списке аргументов обнаружен неизвестный параметр или если параметру, требующему аргумент, аргумент не передан. Аргумент исключения — строка, описывающая причину ошибки. Для длинных параметров это исключение также возбуждается, если параметру, не требующему аргумента, передан аргумент. Атрибуты
msgиoptсодержат сообщение об ошибке и соответствующий параметр; если исключение не связано с конкретным параметром,opt— пустая строка.
-
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(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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/getopt.html