2012-02-03 45 views
1

我有一个Python程序的命令行界面,有一堆选项(比如说,--a,--b--c),但是一个命令行与其他开关之间切换。和奇数的命令行界面解析参数

因此,也许prog -S a b c调用-S动作,而prog -Y a b c调用-Y动作。 prog -Y a b c --a=2 --b=3的话,应该调用-Y行动参数ab和位置参数abc

有没有什么办法让​​或getopt做参数解析给我吗?有没有其他图书馆能够很好地完成这项工作?

回答

3

我认为在这种情况下使用argparse的subcommands会很有用。

基本上,您可以创建一个主解析器,负责解析子命令以及一些常用的常规选项,然后解析传递给该特定选项的几个子分析器(每个子命令一个)子命令。

+0

这几乎是完美的......但如果子命令的名称看起来像是一个选项,则它不起作用。它实际上并不明确,因为所有选项都有两个破折号,并且所有子命令名都有一个;但我不明白如何说出这个问题。 – pavpanchekha 2012-02-07 01:25:01

1

我不能完全肯定这是否会帮助,但到目前为止,我一直在写一个包装,需要从XML参数通过web界面设置,然后将它们传送到命令:

显然需要更复杂的参数字符串,而是一个例子的目的:根据我的web界面的某些标志

def __main__(): 
parser = optparse.OptionParser() 
parser.add_option('-Q', '--ibmax', dest='ibmax', help='') 
(options, args) = parser.parse_args() 
if options.ibmax != 'None' and int(options.ibmax) >= 1: 
       ibmax = '--bmax %s' % options.ibmax 

cmd1 = Popen([another.py, '-Q "%s"' % (options.ibmax),], stdout=PIPE).communicate()[0] 
process = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

,更多的选项被添加到列表ARG,因此不同的运行命令。将每个命令选项添加到解析器,然后检查-Y或-S命令的值以设置变量并更改您需要传递的命令。

我希望这可以帮助,我不是蟒蛇亲,这只是适合我。