Python中的自定义命令行解析

7 投票
7 回答
4886 浏览
提问于 2025-04-11 09:21

我正在为我的一个项目写一个命令行工具,这个工具的设计是解析像这样的命令:

命令名称 参数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
  1. 尽量遵循“命令行接口标准

  2. 把你的参数(就像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

撰写回答