2

我正在使用 optparse 模块中的 OptionParser 来解析我使用 raw_input() 获得的命令。

我有这些问题。

1.) 我使用 OptionParser 来解析这个输入,例如。(获取多个参数)

my prompt> -a foo -b bar -c spam eggs 

我通过在'-c'的add_option()中设置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 

现在每个条目都不能影响上一个命令设置的其他选项。如何完成这些?

4

3 回答 3

4

对于第 2 部分:您需要为您处理的每一行创建一个新的 OptionParser 实例。并查看cmd 模块以编写这样的命令循环。

于 2009-11-11T16:59:49.837 回答
2

您还可以使用nargsoption 属性解决 #1,如下所示:

parser = OptionParser()
parser.add_option("-c", "", nargs=2)
parser.add_option("-d", "", nargs=3)
于 2009-11-11T17:16:17.583 回答
1

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

通常,给定的选项要么接受参数,要么不接受。很多人想要一个“可选选项参数”功能,这意味着如果他们看到某些选项会接受一个参数,如果他们没有看到它就不会。这有点争议,因为它使解析变得模棱两可:如果“-a”采用可选参数而“-b”完全是另一个选项,我们如何解释“-ab”?由于这种歧义, optparse 不支持此功能。

您将通过不重用以前的值来解决#2 parse_args,因此它将创建一个新的值对象而不是更新。

于 2009-11-11T17:07:44.247 回答