我有一个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
行动参数a
和b
和位置参数a
,b
,c
有没有什么办法让或getopt
做参数解析给我吗?有没有其他图书馆能够很好地完成这项工作?
我有一个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
行动参数a
和b
和位置参数a
,b
,c
有没有什么办法让或getopt
做参数解析给我吗?有没有其他图书馆能够很好地完成这项工作?
我认为在这种情况下使用argparse的subcommands会很有用。
基本上,您可以创建一个主解析器,负责解析子命令以及一些常用的常规选项,然后解析传递给该特定选项的几个子分析器(每个子命令一个)子命令。
我不能完全肯定这是否会帮助,但到目前为止,我一直在写一个包装,需要从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命令的值以设置变量并更改您需要传递的命令。
我希望这可以帮助,我不是蟒蛇亲,这只是适合我。
这几乎是完美的......但如果子命令的名称看起来像是一个选项,则它不起作用。它实际上并不明确,因为所有选项都有两个破折号,并且所有子命令名都有一个;但我不明白如何说出这个问题。 – pavpanchekha 2012-02-07 01:25:01