和奇怪的命令行界面来解析参数

时间:2012-02-03 23:22:41

标签: python command-line-arguments

我有一个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应使用参数-Ya以及位置参数bab调用c操作

有没有办法让argparsegetopt为我解析参数?还有其他一些图书馆可以做得很好吗?

2 个答案:

答案 0 :(得分:3)

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

基本上你可以创建一个主解析器来处理子命令的解析以及一些常见的通用选项,然后是一些子解析器(每个子命令一个),它们负责解析传递给子命令的特定选项。

答案 1 :(得分:1)

我不完全确定这是否会有所帮助,但到目前为止,我一直在编写一个包装器,它接受来自Web界面设置的XML的参数,然后将它们传递给命令:

显然需要更复杂的参数字符串,但为了举个例子:

 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)

根据我的Web界面中的某些标志,更多选项会添加到arg列表中,因此会运行不同的命令。将每个命令选项添加到解析器,然后检查-Y或-S命令的值以设置变量并更改需要传递的命令。

我希望这有帮助,我不是python pro,这对我有用。