如何使用 OptionParser 制作自定义命令行界面?

发布于 2024-08-10 10:01:43 字数 578 浏览 3 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

相守太难 2024-08-17 10:01:43

对于第 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.

橙幽之幻 2024-08-17 10:01:43

您还可以使用 nargs 选项属性解决问题 1,如下所示:

parser = OptionParser()
parser.add_option("-c", "", nargs=2)
parser.add_option("-d", "", nargs=3)

You can also solve #1 using the nargs option attribute as follows:

parser = OptionParser()
parser.add_option("-c", "", nargs=2)
parser.add_option("-d", "", nargs=3)
灯角 2024-08-17 10:01:43

optparse 通过要求参数始终具有相同数量的 参数(即使该数字为 0),不允许使用可变参数参数:

通常,给定的选项要么采用
一个论点,或者没有。很多
人们想要一个“可选的选项”
论证”功能,这意味着一些
选项将带有一个参数,如果它们
看到它,如果他们不看到,他们就不会看到。这
有点争议,因为它
使解析不明确:如果“-a”采用
可选参数,“-b”是
完全是另一种选择,我们如何
解释“-ab”?因为这
歧义,optparse不支持
此功能。

您可以通过不重复使用以前的值来解决问题#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:

Typically, a given option either takes
an argument or it doesn’t. Lots of
people want an “optional option
arguments” feature, meaning that some
options will take an argument if they
see it, and won’t if they don’t. This
is somewhat controversial, because it
makes parsing ambiguous: if "-a" takes
an optional argument and "-b" is
another option entirely, how do we
interpret "-ab"? Because of this
ambiguity, optparse does not support
this feature.

You would solve #2 by not reusing the previous values to parse_args, so it would create a new values object rather than update.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文