Я пишу скрипт-обертку, который передает некоторые аргументы другому приложению.Вызов wrapper.py --param1 x --param2 y --args -i 1 -name "Mike Wazowski" --verbose
должен в конце концов инициировать subprocess.Popen
, который в итоге выполняет:
app.exe -i 1 -n "Mike Wazowski" --verbose
Однако это не работает, так как argparse в моем скрипте wrapper.py считает -i
, -n
и--verbose
- это параметры, которые он должен анализировать.
Я мог бы инкапсулировать аргументы, которые я просто хотел бы передать в кавычки, но тогда мне также пришлось бы избегать любых кавычек в кавычках.Тем не менее, я хочу действительно избежать этого:
`wrapper.py --param1 x --param2 y --args "-i 1 -name \"Mike Wazowski\" --verbose"`
То, что я уже пробовал
Я беру этот пример из документации:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='*')
>>> parser.parse_args('a b --foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])
Но вместо того, чтобы дать --bar 1 2
, я должен быть в состоянии предоставить, например, --bar -i -n "Mike Wazowski" --verbose
.Это, однако, приведет к ошибке:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*')
>>> parser.parse_args('--foo -s 1 -e 2'.split())
usage: [-h] [--foo [FOO [FOO ...]]]
: error: unrecognized arguments: -i -n "Mike Wazowski" --verbose
Что я могу сделать, чтобы сделать эту работу?
Я в порядке, всегда определяя мой параметр --args
как последний параметр.Должен ли я просто рассматривать --args
как фиктивный параметр, а затем вручную анализировать sys.argv
, чтобы получить то, что мне нужно?Если да, то как argparse может игнорировать все, что происходит после вхождения --args
в моей команде оболочки?