あなたは私はあなたがこれを試みることができると仮定し、custom action:
import argparse
import collections
class ValidateCredits(argparse.Action):
def __call__(self, parser, args, values, option_string=None):
# print '{n} {v} {o}'.format(n=args, v=values, o=option_string)
valid_subjects = ('foo', 'bar')
subject, credits = values
if subject not in valid_subjects:
raise ValueError('invalid subject {s!r}'.format(s=subject))
credits = float(credits)
Credits = collections.namedtuple('Credits', 'subject required')
setattr(args, self.dest, Credits(subject, credits))
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--credits', nargs=2, action=ValidateCredits,
help='subject followed by number of credits required',
metavar=('SUBJECT', 'CREDITS')
)
args = parser.parse_args()
print(args)
print(args.credits.subject)
print(args.credits.required)
例えば
で
% test.py -c foo 2
Namespace(credits=Credits(subject='foo', required=2.0))
foo
2.0
% test.py -c baz 2
ValueError: invalid subject 'baz'
% test.py -c foo bar
ValueError: could not convert string to float: bar
+1これはうまくいきましたか? –
最後に、これを実装することに成功しました。あなたのソリューションは良いです。私はあなたにもっとアップホントを与えることができれば願っています!ありがとう! –
後書きについて: 'metavar =(" SUBJECT "、" CREDITS ")'を 'add_argument'呼び出しに追加すると、' --credits CREDITS CREDITS'ではなく '--credits SUBJECT CREDITS'が表示されます。 – Dougal