python中options类_Python OptionParser允许选择类型选项的多个参数

我在OptionParser中有一个选项,如下所示:foo_choices = ['foo', 'bar', 'mac', 'win']

parser.add_option('-t', '--test',

type='choice',

action='store',

dest='test',

choices=foo_choices,

default='foo')

但是,我希望该选项能够接受多个选项(可以用逗号分隔,也可以允许>1个参数)。只需设置nargs=2就可以传递多个参数,所以我假设对于类型选择可以这样做。我不知道如何对数量可变的纳格做这件事。在

语法如下:

^{pr2}$

或者./demo.py -t foo -o out.out

./demo.py -t foo bar -o out.out

我尝试过使用回调函数在逗号上拆分,但是如果回调返回一个数组,它就会出错,因为选项是无效的选项'foo,bar'。这个错误是有道理的,但我不知道该怎么办。在def foo_callback(option, opt, value, parser):

setattr(parser.values, option.dest, value.split(','))#!/usr/bin/python

from optparse import OptionParser

def main():

parser = OptionParser()

foo_choices = ['foo', 'bar', 'mac', 'win']

parser.add_option('-t', '--test',

type='choice',

action='callback',

dest='test',

choices=foo_choices,

callback=vararg_callback)

(options, args) = parser.parse_args()

print options

print args

def vararg_callback(option, opt_str, value, parser):

assert value is None

value = []

def floatable(str):

try:

float(str)

return True

except ValueError:

return False

for arg in parser.rargs:

# stop on --foo like options

if arg[:2] == "--" and len(arg) > 2:

break

# stop on -a, but not on -3 or -3.0

if arg[:1] == "-" and len(arg) > 1 and not floatable(arg):

break

value.append(arg)

del parser.rargs[:len(value)]

setattr(parser.values, option.dest, value)

if __name__ == '__main__':

main()

这个片段介绍了一种实现可变数量的narg的方法。然而,我唯一的方法就是从我的选项中删除类型和选项(这违背了我要做的事情的目的)。如果我没有,我会得到的错误是:[vagrant@machine a]$ ./demo.py -t foo

Traceback (most recent call last):

File "./demo.py", line 43, in

main()

File "./demo.py", line 14, in main

(options, args) = parser.parse_args()

File "/usr/lib64/python2.6/optparse.py", line 1394, in parse_args

stop = self._process_args(largs, rargs, values)

File "/usr/lib64/python2.6/optparse.py", line 1438, in _process_args

self._process_short_opts(rargs, values)

File "/usr/lib64/python2.6/optparse.py", line 1545, in _process_short_opts

option.process(opt, value, values, self)

File "/usr/lib64/python2.6/optparse.py", line 788, in process

self.action, self.dest, opt, value, values, parser)

File "/usr/lib64/python2.6/optparse.py", line 808, in take_action

self.callback(self, opt, value, parser, *args, **kwargs)

File "./demo.py", line 20, in vararg_callback

assert value is None

AssertionError

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值