ima*_*hat 5 python argparse python-3.3
我想接受以下样式的参数:
python3 test.py -r SERVICE=100,101,102 -r SERVICE2=1,2,3,4,5
(-r REPO=REV#,REV#,etc... -r etc...)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已完成以下操作(添加了参数-r并定义了类型转速).它应该传回两个列表,这可能会有问题.
import argparse
def revs(s):
try:
REPO, REVISIONS = map(str, s.split('='))
REVISIONS = map(int, REVISIONS.split(','))
return REPO, REVISIONS
except:
raise argparse.ArgumentTypeError("Must be format -r REPO=REV,REV,etc.. e.g. SERVICES=181449,181447")
parser.add_argument('-r', type='revs', nargs='*', action='append', help='Revisions to update. The list is prefixed with the name of the source repository and a "=" sign. This parameter can be used multiple times.', required=True)
Run Code Online (Sandbox Code Playgroud)
运行上述内容时出现以下错误:
Traceback (most recent call last):
File "test.py", line 11, in <module>
parser.add_argument('-r', type='revs', nargs='*', action='append', help='Revisions to update. The list is prefixed with the name of the source repository and a "=" sign. This parameter can be used multiple times.', required=True)
File "/usr/local/lib/python3.3/argparse.py", line 1317, in add_argument
raise ValueError('%r is not callable' % (type_func,))
Run Code Online (Sandbox Code Playgroud)
ValueError:'revs'不可调用
mgi*_*son 10
你要
parser.add_argument('-r', type=revs, ...)
Run Code Online (Sandbox Code Playgroud)
不
parser.add_argument('-r', type='revs', ...)
Run Code Online (Sandbox Code Playgroud)
该type参数必须是一个可调用的对象-因为字符串是不可调用的,它们不能被用作type.