【发布时间】:2015-11-23 03:06:37
【问题描述】:
在其中一种极端情况下使用 argparse 时遇到问题。比如说,我有一个脚本以下列方式运行另一个应用程序:
./myScript -a 1 -b 2 -c 3 <etc> ./application.exe <application arguments>
我不知道也不关心应用程序的参数,但问题是它们可能与脚本的参数冲突,例如“-abc 123”甚至“-a bla_bla”。 我想要的是使 argparse 匹配命令行中的第一个匹配选项,并且不尝试匹配字符串的其余部分。有可能吗?
例如:
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--aaa', default=1, dest='first_entry')
args, unknown = parser.parse_known_args()
print args
为./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 值。
【问题讨论】:
-
你能改变
-a,使它不与其他参数冲突吗?--a甚至可以工作,更好的是--anything-but-ab。--选项的处理方式与-不同。