是的,它可以用做optparse。
這是一個例子:
./test.py --categories=aaa --categories=bbb --categories ccc arg1 arg2 arg3
它打印:
arguments: ['arg1', 'arg2', 'arg3']
options: {'categories': ['aaa', 'bbb', 'ccc']}
全部工作示例如下:
#!/usr/bin/env python
import os, sys
from optparse import OptionParser
from optparse import Option, OptionValueError
VERSION = '0.9.4'
class MultipleOption(Option):
ACTIONS = Option.ACTIONS + ("extend",)
STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)
def take_action(self, action, dest, opt, value, values, parser):
if action == "extend":
values.ensure_value(dest, []).append(value)
else:
Option.take_action(self, action, dest, opt, value, values, parser)
def main():
PROG = os.path.basename(os.path.splitext(__file__)[0])
long_commands = ('categories')
short_commands = {'cat':'categories'}
description = """Just a test"""
parser = OptionParser(option_class=MultipleOption,
usage='usage: %prog [OPTIONS] COMMAND [BLOG_FILE]',
version='%s %s' % (PROG, VERSION),
description=description)
parser.add_option('-c', '--categories',
action="extend", type="string",
dest='categories',
metavar='CATEGORIES',
help='comma separated list of post categories')
if len(sys.argv) == 1:
parser.parse_args(['--help'])
OPTIONS, args = parser.parse_args()
print "arguments:", args
print "options:", OPTIONS
if __name__ == '__main__':
main()
更多信息在http://docs.python.org/library/optparse.html#adding-new-actions
這就是我想竟被工作也是如此。 但是我得到這個錯誤: AttributeError:'str'對象沒有屬性'追加' 當我給一個字符串選項的動作。 – jduncan 2010-05-03 11:14:28
@jduncan:你確定嗎?我剛剛嘗試過,並且再次按預期工作。 – 2010-05-03 12:04:39
如果我不指定任何選項 - options.test是None並且無法枚舉,我將無法使用它(Python 2.6) – 2010-05-03 15:40:37