我试图找出如何使用argparser执行以下操作:
$ python test.py executeBuild --name foobar1 executeBuild --name foobar2 ....
getBuild
本身是一个子命令。我的目标是让脚本能够链接一系列子命令(executeBuild
就是其中之一)并按顺序执行它们。在上面的示例中,它将执行一个构建,然后设置环境,然后再次执行构建。如何使用argparse实现这一点?我试过以下方法:
但是,似乎每当我这样做时,它就会进入executeBuild
的子命令并报告它不知道executeBuild
是什么。我试着解析出额外的,这样我就可以执行一个重复调用/链,但是,第一个视图属性似乎已经被覆盖,所以我甚至不能保存额外的选项并遍历。在
您在问
argparse
它不是为它编写的:它擅长解析一个命令行(但只能解析一个命令行),而您希望在一行中解析多个命令。IMHO,必须对参数数组进行初始拆分,然后对每个子命令使用argparse
。下面的函数接受参数列表(可以是sys.argv
),跳过数组中从每个已知子命令开始的第一个参数和剩余的参数。然后可以对每个子列表使用argparse:在您的例子中:
^{pr2}$=>
限制:子命令用作保留字,不能用作选项参数。在
在手之前分开
sys.argv
是一个很好的解决方案。但也可以在使用nargs=argparse.REMAINDER
参数进行解析时完成。这种类型的参数获取其余的字符串,不管它们看起来是否像标志。在将
parse_known_args
替换为以下代码:印刷品:
^{pr2}$在文档中:
REMAINDER
的一个问题是太贪心了。http://bugs.python.org/issue14174。因此,build_parser
和{绕过贪婪}那么贪婪,因此子parser可以有其他位置参数。在
REMAINDER
的方法是使用argparse.PARSER
。这是nargs
使用的nargs
值(未记录)。它类似于REMAINDER
,只是第一个字符串必须看起来像一个“参数”(no“-”),并且与choices
(如果给定)匹配。PARSER
不像{有一些额外的代码涉及“exit”字符串和伪解析器。这是为了避免
PARSER
参数是“必需的”(有点像nargs='+'
)样本输出:
另一种可能是使用
' '
分隔命令块:但是当有几个
' '
时,就会出现问题:http://bugs.python.org/issue13922相关问题 更多 >
编程相关推荐