Spec-Zone.ru › Python 3.11

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 — это строка символов опций, которые скрипт хочет распознать, опции, требующие аргумента, следуют за двоеточием (':'; то есть, тот же формат, что и Unix getopt()).

Примечание

В отличие от GNU getopt(), после аргумента, не являющегося опцией, все последующие аргументы считаются также не являющимися опциями. Это аналогично тому, как работают не-GNU системы Unix.

longopts, если указано, должно быть списком строк с именами длинных опций, которые должны поддерживаться. Ведущие '--' символы не должны включаться в имя опции. Длинные опции, которые требуют аргумента, должны следовать за знаком равенства ('='). Необязательные аргументы не поддерживаются. Для приема только длинных опций shortopts должно быть пустой строкой. Длинные опции в командной строке могут быть распознаны, если они предоставляют префикс имени опции, который точно соответствует одной из принятых опций. Например, если longopts — ['foo', 'frob'], опция --fo будет совпадать как --foo, но --f не будет совпадать однозначно, поэтому будет поднято исключение GetoptError.

Результат состоит из двух элементов: первый — список пар «опция-значение»; второй — список аргументов программы, оставшихся после удаления списка опций (это конечный срез 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 ..

См. также

Module argparse

Альтернативный модуль для разбора аргументов командной строки.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/getopt.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API