解析Python Cmd模块中的参数
我正在使用 Cmd 模块用 Python 编写一个命令行工具。
我希望能够发出以下命令:
resize -file all -height 100 -width 200 -type jpeg
或
resize -file 'a file.jpg' -type png -height 50 -width 50
[编辑] 要明确的是,上述命令是要输入到我的命令行应用程序中,而不是从终端输入。上面的行将调用我的 Cmd 模块的 do_resize(self, line) 方法,并将参数作为字符串传递。因此,OptParse 和 argparse 不执行我需要的操作,因为它们似乎只从 sys.argv 获取参数。
有些参数是必需的,有些是可选的。当使用另一些时,一些就变得必需了。
解析参数字符串的最佳方法是什么?我读过Python中的一些工具可以使这变得简单,但我不确定我在寻找什么。
I am writing a command line tool in Python using the Cmd module.
I want to be able to issue commands such as:
resize -file all -height 100 -width 200 -type jpeg
or
resize -file 'a file.jpg' -type png -height 50 -width 50
[edit] To be clear the above command is to be enter into my command line application NOT from the terminal. The line above would call the do_resize(self, line) method of my Cmd module and pass in the parameters as a string. For this reason OptParse and argparse don't do what I need as they appear to only get paramters from sys.argv.
Some parameters are required, some are optional. Some become required when others are used.
What is the best way to parse the parameter string? I have read there are tools in Python that make this easy but I'm not sure what I'm look for.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您正在寻找 optparse (argparse for python 2.7+)
编辑: 事实上根据this 文档部分,您可以调用函数
parse_args
传递参数列表,该列表默认(但不是限制为)sys.argv[1:]
因此,如果您有
args_str = '-file all -height 100 -width 200 -type jpeg'
您可以调用parser.parse_args(args_str.split())
它会正确解析选项。you are looking for optparse (argparse for python 2.7+)
edit: In fact according to this section of docs, you can call function
parse_args
passing a list of arguments, which defults (but not limits to)sys.argv[1:]
So, if you have for example
args_str = '-file all -height 100 -width 200 -type jpeg'
you can callparser.parse_args(args_str.split())
and it will parse correctly the options.最好的选择是 argparse 模块。
Best option is the argparse module.
我喜欢 getopt 因为它很简单。
I love getopt because it is simple.
shlex 模块怎么样。我想正是为了这个目的。
How about the shlex module. I think it is exactly for this purpose.