如何使用Python的optparse模块创建一个接受可变参数的选项?
使用Perl的Getopt::Long
模块,你可以很方便地定义命令行选项,这些选项可以接受不同数量的参数:
foo.pl --files a.txt --verbose
foo.pl --files a.txt b.txt c.txt --verbose
那么,有没有办法直接用Python的optparse
模块来做到这一点呢?根据我的了解,nargs
这个选项属性可以用来指定一个固定数量的参数,但在文档中我没有看到其他的选择。
6 个回答
10
我犯了个错误:刚刚发现这个 回调示例 6。
21
我花了一些时间才搞明白这个,不过你可以通过回调函数来实现你的需求。看看我在这个例子中是怎么获取任意数量的参数到“--file”这个标志的。
from optparse import OptionParser,
def cb(option, opt_str, value, parser):
args=[]
for arg in parser.rargs:
if arg[0] != "-":
args.append(arg)
else:
del parser.rargs[:len(args)]
break
if getattr(parser.values, option.dest):
args.extend(getattr(parser.values, option.dest))
setattr(parser.values, option.dest, args)
parser=OptionParser()
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose",
help="be vewwy quiet (I'm hunting wabbits)")
parser.add_option("-f", "--filename",
action="callback", callback=cb, dest="file")
(options, args) = parser.parse_args()
print options.file
print args
唯一的副作用是你得到的参数是一个列表,而不是元组。不过这很容易解决,对我来说,列表更符合我的需求。