Argparse:忽略未知参数中的破折号或收集值(可能以破折号开头)直到下一个已知命令
Argparse: Ignore dashes in unknown arguments or collect values (potentially starting with dashes) until the next known command
我有一个 Python 脚本,稍后将使用 supprocess.run
调用多个 Bash 脚本。调用 Python 脚本时,用户应该能够为 Bash 脚本指定参数列表(其中一些可能以连字符开头),例如
python script.py \
--bash-args1 --param1 val1 --param2 val2 \
--bash-args2 bla --param3 val3 --blu
Argparse 应该将其解析为 Namespace(bash_args1=['--param1', 'val1', '--param2', 'val2'], bash_args2=['bla', '--param3', 'val3', '--blu'])
。有没有一种规范的方法可以实现这一目标?我不能使用 nargs=argparse.REMAINDER
或 parser.parse_known_args
,因为我需要为多个 Bash 脚本收集参数,如果次要参数以破折号开头,一个简单的 nargs='+'
将失败。
我想我需要以下其中一项:
- 类似于
REMAINDER
的东西导致 argparse 收集所有字符串直到下一个已知参数
- 一个选项,告诉 argparse 在使用
nargs='+'
时忽略未知参数中的破折号。
子孙后代:
有几种方法可以解决 argparse
的这一限制。我包了一个 published it on PyPI. You can use it just like argparse
. The only difference is that there is an extra option you can supply as nargs
parameter in add_argument
. When this option is used, the parser collects all unknown arguments (regardless of whether they start with a hyphen or not) until the next known argument. For more info check out the repo on github.
我有一个 Python 脚本,稍后将使用 supprocess.run
调用多个 Bash 脚本。调用 Python 脚本时,用户应该能够为 Bash 脚本指定参数列表(其中一些可能以连字符开头),例如
python script.py \
--bash-args1 --param1 val1 --param2 val2 \
--bash-args2 bla --param3 val3 --blu
Argparse 应该将其解析为 Namespace(bash_args1=['--param1', 'val1', '--param2', 'val2'], bash_args2=['bla', '--param3', 'val3', '--blu'])
。有没有一种规范的方法可以实现这一目标?我不能使用 nargs=argparse.REMAINDER
或 parser.parse_known_args
,因为我需要为多个 Bash 脚本收集参数,如果次要参数以破折号开头,一个简单的 nargs='+'
将失败。
我想我需要以下其中一项:
- 类似于
REMAINDER
的东西导致 argparse 收集所有字符串直到下一个已知参数 - 一个选项,告诉 argparse 在使用
nargs='+'
时忽略未知参数中的破折号。
子孙后代:
有几种方法可以解决 argparse
的这一限制。我包了一个 published it on PyPI. You can use it just like argparse
. The only difference is that there is an extra option you can supply as nargs
parameter in add_argument
. When this option is used, the parser collects all unknown arguments (regardless of whether they start with a hyphen or not) until the next known argument. For more info check out the repo on github.