I want to accept arguments in the following style:
python3 test.py -r SERVICE=100,101,102 -r SERVICE2=1,2,3,4,5
(-r REPO=REV#,REV#,etc... -r etc...)
I've done the following so far (added the argument -r and defined the type revs). It's supposed to pass back two lists, which may be problematic.
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)
I get the following error when running with the above:
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,))
ValueError: 'revs' is not callable
you want
parser.add_argument('-r', type=revs, ...)
not
parser.add_argument('-r', type='revs', ...)
The type
argument must be a callable object -- since strings aren't callable, they can't be used as the type
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.