Argparse只匹配第一个选项项

2024-06-14 18:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,当使用argparse在一个角落的情况。例如,我有一个脚本,它以以下方式运行另一个应用程序:

./myScript -a 1 -b 2 -c 3 <etc> ./application.exe <application arguments>

我不知道也不关心应用程序的参数,但问题是它们可能与脚本的参数发生冲突,例如“-abc123”甚至“-a blaèbla”。 我想要的是使argparse匹配命令行中的第一个匹配选项,而不尝试匹配字符串的其余部分。有可能吗?在

例如:

^{pr2}$

./example.py -a 3 someApplication -ab 4生成以下输出:

Namespace(first_entry='b') 

尽管我希望如此

Namespace(first_entry='3') 

在我的确切例子中,启动字符串如下所示

`./script -a 1 -b1 2 -b2 2 -b3 2 ... -bX 2 -c 3 ./application.exe -ab 3`

其中-a, -b1, .., -bX, -c可以按任何顺序放置 我不能将所有可能的参数添加到我的脚本中,因为基本上我只想检查-a和-c,并将其他所有内容传递给另一个脚本(有大量受支持的选项)。 当我使用REMAINDER时,它将-a选项之后的所有内容放入rest,而我也希望得到-c值。在


Tags: 字符串脚本应用程序参数abapplication选项argparse
1条回答
网友
1楼 · 发布于 2024-06-14 18:31:38

您可以设置位置参数以获取命令行的余数:

parser.add_argument('command', nargs=argparse.REMAINDER)

这将告诉argparse在解析位置参数后,将所有参数吞入命名空间上的command变量中:

^{pr2}$

^{} documentation

argparse.REMAINDER. All the remaining command-line arguments are gathered into a list. This is commonly useful for command line utilities that dispatch to other command line utilities:

你不能真的做你真正想要的;切利挑选任意顺序的任意参数。您可以捕获command部分之前的特定参数和后面的任意参数,但是支持command部分之前的任意参数也是不可行的,因为您不知道哪些可选参数接受参数,哪些参数没有。argparse在这里帮不了你。在

相关问题 更多 >