Argparse: Как принять любое количество необязательных аргументов (начиная с `-` или `--`)Python

Программы на Python
Ответить
Anonymous
 Argparse: Как принять любое количество необязательных аргументов (начиная с `-` или `--`)

Сообщение Anonymous »

Я пытаюсь создать инструмент командной строки (назовем его «X»), который является оболочкой другого инструмента (назовем его «Y»).

Я обрабатывать некоторые случаи специально и добавлять некоторые свои параметры, но я хочу перенаправить все, что не хочу обрабатывать, в инструмент Y.

Пока мне удалось перенаправить аргументы, которые не содержат тире, например X Y option1 option2 option3 просто вызовет Y option1 option2 option3. Я сделал это, добавив к нему субпарсер Y и аргумент Any

Вот код (x.py):

Код: Выделить всё

main_parser = argparse.ArgumentParser()
subparsers = main_parser.add_subparsers(dest="parser_name")

y_subparser = subparsers.add_parser('y')
y_options = y_subparser.add_argument('any', nargs='*')
Затем в моем коде обработчика я делаю следующее:

Код: Выделить всё

args = main_parser.parse_args()
if args.parser_name == 'y':
command_string = ' '.join(['y'] + sys.argv[2:])
os.system(command_string)
Когда я вызываю python x.py y asdf zxcv qwer, это работает.

Когда я вызовите python x.py y asdf zxcv qwer -option. Я получаю сообщение об ошибке x.py: ошибка: нераспознанные аргументы: -option

I понимаю, что если с argparse что-то станет слишком сложным, я всегда могу вернуться к использованию sys.argv, но если вы знаете, что это выполнимо, поделитесь, пожалуйста.

Я также просматривал код argparse, который немного плотный и в котором кажется, что ArgumentParser._parse_known_args делает все (300 строк). Но прежде чем углубляться, я подумал, может быть, кто-нибудь знает, как это сделать. Если нет, я опубликую здесь свои открытия, если у кого-то еще возникнет такая же проблема.

Подробнее здесь: https://stackoverflow.com/questions/314 ... ng-with-or
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»