getopt
— С-подобный парсер параметров командной строки¶
Исходный код: 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()
, после непараметрического аргумента все дальнейшие аргументы считаются также непараметрами. Это аналогично тому, как работают не- GNU Unix системы.longopts, если указано, должен быть список строки с именами длинных опций, которые должны поддерживаться. Ведущие символы
'--'
не должны включаться в имя параметра. За длинными опциями, требующими аргумента, следует знак равенства ('='
). Необязательные аргументы не поддерживаются. Чтобы принимать только длинные опции, shortopts должен быть пустым строка. Длинные опции в командной строке можно распознать, если они содержат префикс имени опции, который точно соответствует одной из принятых опций. Например, если longopts является['foo', 'frob']
, параметр--fo
будет совпадать как--foo
, но--f
не будет совпадать однозначно, поэтомуGetoptError
будет поднят.возвращает значение состоит из двух элементов: первый - список
(option, value)
пар; второй - список программных аргументов, оставшихся после удаления списка опций (это задний срез args). У каждого option-значение возвращенный пары есть выбор как его первый элемент, снабженный префиксом дефис для коротких вариантов (например,'-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(err) # напечатает что-то вроде "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 ..
См.также
- Модуль
argparse
- Альтернативная библиотека парсинга опций командной строки и аргументов.