getopt.md
1> **Источник:** https://python-all.ru/3.0/library/getopt.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `getopt` – Парсер аргументов командной строки89Этот модуль помогает скриптам разбирать аргументы командной строки в `sys.argv`. Он поддерживает те же соглашения, что и функция `getopt` в Unix (включая особое значение аргументов вида ‘`-`‘ и ‘`--`‘). Длинные опции, аналогичные поддерживаемым в GNU, также могут использоваться с помощью необязательного третьего аргумента.1011Более удобная, гибкая и мощная альтернатива – модуль [`optparse`](https://python-all.ru/3.0/library/optparse.html#module-optparse).1213Этот модуль предоставляет две функции и одно исключение:1415#### `[getopt.getopt]getopt.getopt(args, options[, long_options])`1617Разбирает параметры командной строки и список аргументов. *args* – это список аргументов для разбора, без начальной ссылки на запущенную программу. Обычно это означает `sys.argv[1:]`. *options* – строка с буквами опций, которые скрипт хочет распознавать; опции, требующие аргумента, сопровождаются двоеточием (`':'`; т.е. тот же формат, что использует `getopt` в Unix).1819> **Примечание**20>21> В отличие от GNU `getopt`, после аргумента, не являющегося опцией, все последующие аргументы также считаются не опциями. Это похоже на то, как работают Unix-системы, не являющиеся GNU.2223*long\_options*, если указан, должен быть списком строк с именами длинных опций, которые должны поддерживаться. Символы `'--'` в начале не должны включаться в имя опции. Длинные опции, требующие аргумента, должны сопровождаться знаком равенства (`'='`). Чтобы принимать только длинные опции, *options* должна быть пустой строкой. Длинные опции в командной строке могут распознаваться, если они представляют собой префикс имени опции, который точно соответствует одной из принятых опций. Например, если *long\_options* – это `['foo', 'frob']`, то опция *--fo* будет соответствовать *--foo*, но *--f* не будет однозначно соответствовать, поэтому будет вызвано исключение [`GetoptError`](https://python-all.ru/3.0/library/getopt.html#getopt.GetoptError).2425Возвращаемое значение состоит из двух элементов: первый – это список пар `(option, value)`; второй – это список аргументов программы, оставшихся после удаления списка опций (это конечный срез *args*). Каждая возвращенная пара «опция-значение» содержит опцию в качестве первого элемента, с префиксом в виде дефиса для коротких опций (например, `'-x'`) или двух дефисов для длинных опций (например, `'--long-option'`), и аргумент опции в качестве второго элемента, либо пустую строку, если опция не имеет аргумента. Опции располагаются в списке в том же порядке, в котором они были найдены, что допускает множественное появление. Длинные и короткие опции могут быть перемешаны.2627#### `[getopt.gnu_getopt]getopt.gnu_getopt(args, options[, long_options])`2829Эта функция работает как [`getopt()`](https://python-all.ru/3.0/library/getopt.html#getopt.getopt), за исключением того, что по умолчанию используется режим сканирования в стиле GNU. Это означает, что опции и аргументы, не являющиеся опциями, могут перемежаться. Функция [`getopt()`](https://python-all.ru/3.0/library/getopt.html#getopt.getopt) прекращает обработку опций, как только встречается аргумент, не являющийся опцией.3031Если первый символ строки опций – ‘+’, или если установлена переменная окружения **POSIXLY\_CORRECT**, то обработка опций прекращается, как только встречается аргумент, не являющийся опцией.3233#### `[getopt.GetoptError]exception getopt.GetoptError`3435Это исключение вызывается, когда в списке аргументов найдена нераспознанная опция или когда опции, требующей аргумента, не предоставлено ни одного. Аргумент исключения – строка, указывающая причину ошибки. Для длинных опций передача аргумента опции, которая его не требует, также вызовет это исключение. Атрибуты3637`msg`3839и4041`opt`4243содержат сообщение об ошибке и связанную опцию; если нет конкретной опции, к которой относится исключение,4445`opt`4647является пустой строкой.4849#### `[getopt.error]exception getopt.error`5051Псевдоним для5253[`GetoptError`](https://python-all.ru/3.0/library/getopt.html#getopt.GetoptError)5455; для обратной совместимости.5657Пример использования только опций в стиле Unix:5859```python60>>> import getopt61>>> args = '-a -b -cfoo -d bar a1 a2'.split()62>>> args63['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']64>>> optlist, args = getopt.getopt(args, 'abc:d:')65>>> optlist66[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]67>>> args68['a1', 'a2']69```7071Использование длинных имён опций так же просто:7273```python74>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'75>>> args = s.split()76>>> args77['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']78>>> optlist, args = getopt.getopt(args, 'x', [79... 'condition=', 'output-file=', 'testing'])80>>> optlist81[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]82>>> args83['a1', 'a2']84```8586В скрипте типичное использование выглядит примерно так:8788```python89import getopt, sys9091def main():92 try:93 opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])94 except getopt.GetoptError as err:95 # print help information and exit:96 print(err) # will print something like "option -a not recognized"97 usage()98 sys.exit(2)99 output = None100 verbose = False101 for o, a in opts:102 if o == "-v":103 verbose = True104 elif o in ("-h", "--help"):105 usage()106 sys.exit()107 elif o in ("-o", "--output"):108 output = a109 else:110 assert False, "unhandled option"111 # ...112113if __name__ == "__main__":114 main()115```116117> **См. также**118>119> **Модуль [`optparse`](https://python-all.ru/3.0/library/optparse.html#module-optparse)**120>121> Более объектно-ориентированный разбор параметров командной строки.122