如何使用OptionParser创建自定义命令行界面?

时间:2009-11-11 16:52:08

标签: python optparse

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

我有这些问题。

1。)我使用OptionParser来解析这个输入,比如说。 (得到多个args)

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

我通过在'-c'的add_option()中设置action ='store_true'来做到这一点,现在如果有另一个带有多个参数的选项说-d x y z那么如何知道哪个参数来自哪个选项?如果其中一个参数必须再次被解析,如

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 

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

  

通常,给定选项需要   一个论点或它没有。很多   人们想要一个“可选的选项   参数“特征,意思是一些   如果他们选择将采取争论   看到它,如果不这样做就不会。这个   有点争议,因为它   解析模糊:如果“-a”需要   一个可选参数和“-b”是   完全是另一种选择,我们如何   解释“-ab”?因为这   歧义,optparse不支持   这个功能。

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

相关问题