Python中的自定义命令行解析
我正在为我的一个项目写一个命令行工具,这个工具的设计是解析像这样的命令:
命令名称 参数1="长值" 参数2=123 参数3=我@我.com
我遇到的问题是,Python的一些命令行解析库(比如getopt和optparse)要求在参数前面加上'-'或者'--'。这个要求跟我的需求不符。
有没有什么办法可以解决这个问题?有没有现成的库可以用?
7 个回答
2
这是一个关于Ironforggy's shlex答案的小改进,使用了Python的写法:
args = dict( arg.split('=', 1) for arg in shlex.split(cmdln_args) )
哦,出错了... - 已经修正过来了。
谢谢,J.F. Sebastian (得记住那些只有一个参数的生成器表达式)。
9
尽量遵循“命令行接口标准”
把你的参数(就像Thomas建议的那样)转换成OptionParser格式。
parser.parse_args(["--"+p if "=" in p else p for p in sys.argv[1:]])
如果命令行参数不是在sys.argv或者类似的列表中,而是在一个字符串里,那么(就像ironfroggy建议的那样)可以使用 shlex.split()
。
parser.parse_args(["--"+p if "=" in p else p for p in shlex.split(argsline)])
10
你可以用shlex.split()来把它们分开,这个方法可以处理你提到的带引号的值,而且用一个很简单的正则表达式就能轻松解析。或者,你也可以只用正则表达式来进行分割和解析。还有一种简单的方法就是直接用split()。
args = {}
for arg in shlex.split(cmdln_args):
key, value = arg.split('=', 1)
args[key] = value