Сообщить об ошибке.

Методы разбора командной строки объектом ArgumentParser в Python

Варианты разбора параметров командной строки

В разделе рассмотрены методы разбора командной строки объектом ArgumentParser, а так же создание пользовательского парсера файла, содержащего параметры командной строки.

Содержание:


parser.parse_known_args(args=None, namespace=None):

Иногда сценарий может анализировать только несколько параметров командной строки, передавая оставшиеся аргументы другому сценарию или программе. В этих случаях может быть полезен метод parse_known_args().

Метод parse_known_args() работает так же, как метод parse_args(), за исключением того, что не вызывает ошибки при наличии дополнительных параметров командной строки. Вместо этого он возвращает двухэлементный кортеж, содержащий заполненное пространство имен и список оставшихся строк параметров.

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('bar')
>>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam'])
# (Namespace(bar='BAR', foo=True), ['--badger', 'spam'])

Предупреждение. Правила сокращения аргументов применяются к методу parse_known_args(). Синтаксический анализатор может использовать параметр, даже если это просто префикс одного из его известных параметров, и не оставит его в списке оставшихся параметров!

parser.parse_known_intermixed_args(args=None, namespace=None)
parser.parse_intermixed_args(args=None, namespace=None):

Ряд команд Unix позволяет пользователю смешивать необязательные параметры с позиционными параметрами. Методы parse_intermixed_args() и parse_known_intermixed_args() поддерживают этот стиль анализа.

Эти парсеры не поддерживают все функции модуля argparse и будут вызывать исключения, если используются неподдерживаемые функции. В частности, не поддерживаются суб-парсеры, argparse.REMAINDER и взаимоисключающие группы, которые включают как необязательные, так и позиционные параметры.

В следующем примере показано различие между методом parse_known_args() и parse_intermixed_args():

  • метод parse_known_args() возвращает ['2', '3'] как не проанализированные параметры,
  • метод parse_intermixed_args() собирает все позиционные числа в rest.
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.add_argument('cmd')
>>> parser.add_argument('rest', nargs='*', type=int)
>>> parser.parse_known_args('doit 1 --foo bar 2 3'.split())
# (Namespace(cmd='doit', foo='bar', rest=[1]), ['2', '3'])
>>> parser.parse_intermixed_args('doit 1 --foo bar 2 3'.split())
# Namespace(cmd='doit', foo='bar', rest=[1, 2, 3])
  • Метод parser.parse_known_intermixed_args() возвращает двухэлементный кортеж, содержащий заполненное пространство имен и список оставшихся строк параметров.
  • Метод parse_intermixed_args() вызывает ошибку, если остались не проанализированные строки параметров.

Новое в Python 3.7.

parser.convert_arg_line_to_args(arg_line):

По умолчанию, аргументы из файла (переданного в командную строку) считываются по одному в строке (смотрите ключевой аргумент fromfile_prefix_chars конструктора argparse.ArgumentParser()).

Метод convert_arg_line_to_args() можно переопределить для более удобного чтения.

Метод convert_arg_line_to_args() принимает единственный аргумент arg_line, который является строкой, считанной из файла параметров и возвращает список аргументов, извлеченных из этой строки. Метод вызывается один раз для каждой строки, прочитанной из файла параметров, по порядку.

Полезным переопределением этого метода является то, что каждое слово, разделенное пробелами, рассматривается как аргумент. В следующем примере показано, как это сделать:

class MyArgumentParser(argparse.ArgumentParser):
    def convert_arg_line_to_args(self, arg_line):
        return arg_line.split()