如何使用 OptionParser 制作自定义命令行界面?
我正在使用 optparse 模块中的 OptionParser 来解析使用 raw_input() 获得的命令。
我有这些问题。
1.) 我使用 OptionParser 来解析此输入,例如。 (获取多个参数)
my prompt> -a foo -b bar -c spam eggs
我通过在 add_option() 中为 '-c' 设置 action='store_true' 来做到这一点,现在如果有另一个带有多个参数的选项,比如 -dxyz 那么如何知道哪些参数来自哪个选项?另外,如果必须再次解析其中一个参数,如
my prompt> -a foo -b bar -c spam '-f anotheroption'
2.) 如果我想做这样的事情..
my prompt> -a foo -b bar
my prompt> -c spam eggs
my prompt> -d x y z
现在每个条目不得影响前一个命令设置的其他选项。如何实现这些?
I am using the OptionParser from optparse module to parse my command that I get using the raw_input().
I have these questions.
1.) I use OptionParser to parse this input, say for eg. (getting multiple args)
my prompt> -a foo -b bar -c spam eggs
I did this with setting the action='store_true' in add_option() for '-c',now if there is another option with multiple argument say -d x y z then how to know which arguments come from which option? also if one of the arguments has to be parsed again like
my prompt> -a foo -b bar -c spam '-f anotheroption'
2.) if i wanted to do something like this..
my prompt> -a foo -b bar
my prompt> -c spam eggs
my prompt> -d x y z
now each entry must not affect the other options set by the previous command. how to accomplish these?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
对于第 2 部分:您需要为您处理的每一行创建一个新的 OptionParser 实例。并查看cmd 模块来编写这样的命令循环。
For part 2: you want a new OptionParser instance for each line you process. And look at the cmd module for writing a command loop like this.
您还可以使用 nargs 选项属性解决问题 1,如下所示:
You can also solve #1 using the
nargs
option attribute as follows:optparse
通过要求参数始终具有相同数量的 参数(即使该数字为 0),不允许使用可变参数参数:您可以通过不重复使用以前的值来解决问题#2
parse_args
,因此它将创建一个新的值对象而不是更新。
optparse
solves #1 by requiring that an argument always have the same number of parameters (even if that number is 0), variable-parameter arguments are not allowed:You would solve #2 by not reusing the previous values to
parse_args
, so it would create a new values object rather than update.