Подавление обработки опции после аргумента командной строки без опции - PullRequest
0 голосов
/ 05 мая 2020

Я пишу программу-оболочку, которая принимает список аргументов, которые будут переданы в другую программу, и некоторые параметры, c указывающие моей оболочке. Чтобы избежать путаницы в отношении того, какие параметры go где, я хочу, чтобы любое появление аргумента без параметра подавляло обработку дальнейших аргументов как параметров, как если бы аргумент -- появился непосредственно перед ним. Другими словами, нечто подобное тому, что делает xterm -e.

Как лучше всего sh выполнить это в Python? Я бы предпочел решение, использующее argparse, а не парсинг командной строки вручную.

1 Ответ

0 голосов
/ 05 мая 2020

Используйте nargs=argparse.REMAINDER или nargs=argparse.PARSER.

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('argv', nargs=argparse.REMAINDER)
>>> parser.add_argument('--foo', action='store_const', const=True)
>>> print(parser.parse_args(['--foo', 'a', '--foo', 'b']))
Namespace(argv=['a', '--foo', 'b'], foo=True)
>>> print(parser.parse_args(['--foo']))
Namespace(argv=[], foo=True)

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('argv', nargs=argparse.PARSER)
>>> parser.add_argument('--foo', action='store_const', const=True)
>>> print(parser.parse_args(['--foo', 'a', '--foo', 'b']))
Namespace(argv=['a', '--foo', 'b'], foo=True)
>>> print(parser.parse_args(['--foo']))
usage: [-h] [--foo] argv ...
: error: the following arguments are required: argv
...