adb shell am
command (activity manager)的参数如下:
[--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]]
据我所知argparse
是解析参数的python方法。我需要一个应该采取的行动:
--eia key1 1 2 3
)(参见最后一点)--eia key1 1,2 --eia key2 2,1
有效,
的分隔符,但我想允许使用空格分隔,因为我的实际参数值可能是字符串,我想将它们解析为shell(如果是字符串)应以-
开头,引号有助于:"-asdf"
)另一个问题has an answer可以通过位置参数来做到这一点:
parser = argparse.ArgumentParser(usage='%(prog)s [-h] file file [file ...]')
parser.add_argument('file1', nargs=1, metavar='file')
parser.add_argument('file2', nargs='+', metavar='file', help=argparse.SUPPRESS)
namespace = parser.parse_args()
namespace.file = namespace.file1 + namespace.file2
但我不知道这些是否适用于可选参数?
根据我的要求,从argparse
开始是个好主意吗?还有其他选择吗?
答案 0 :(得分:1)
- consists of 2 or more arguments (eg. --eia key1 1 2 3) (see last point)
有一个建议的补丁允许nargs
像2 or more
一样,以re {n,m}
符号为模型。但是现在我觉得nargs='+'
是你最好的选择。重要的是它抓住了必要的论据。您可以在parse_args
之后检查“2个或更多”(自定义type
也可以检查)。
- is optional
使用--eia
标志来处理
- edit it can occour multiple times, eg. --eia key1 1,2 --eia key2 2,1 is valid
允许使用--eia
标志,但仅保留最后一个条目。但action='append'
会将每个条目集保存为列表(或元组?);所以命名空间将有args.eia = [['key1','1','2'],['key2',...],...]
。与动作类型一起玩并验证这一点。
- the type of the first argument may differ from the type of the rest
将值保留为字符串,然后进行自己的转换是最简单的。您可以编写自定义type
(或action
)来检查值。但代码与您在argparse
之后使用的代码类似。
- other optional arguments like this can exist
这取决于你如何编写添加的代码。
- the example has the delimiter of a , but I'd like to allow delimiting with spaces, because my actual argument values may be strings and I'd like to leave parsing them to the shell (if a string should start with -, quotation marks help: "-asdf")
主shell,即调用脚本的shell,是将命令行拆分为字符串的主shell,主要是在空格上。 argparse
使用sys.argv
,即字符串列表。如果该列表不是您想要的,那么在将其传递给argparse.parse_args(argv)
之前,您必须先将其弄清楚。
测试argparse
的常用方法是:
parser.parse_args('--eia key1 1,2 --eia key2 2,1'.split())
复制主要分裂空格,但不处理shell引用和转义字符。有一种方法可以复制shell动作,但是我必须四处寻找它。