命令行参数,我想我的Python程序来解析命令喜欢这样的论点:解析与argparse
python dosomething.py z a1 b1 a2 b2 ...
在那里我可以有任意数量#B#对和Z是一个不相关的数字。如有必要,我可以指定a和b对的数量。我正在使用argparse。
命令行参数,我想我的Python程序来解析命令喜欢这样的论点:解析与argparse
python dosomething.py z a1 b1 a2 b2 ...
在那里我可以有任意数量#B#对和Z是一个不相关的数字。如有必要,我可以指定a和b对的数量。我正在使用argparse。
您需要为这种专门行为定义custom action。
import sys
import argparse
class AbsAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
if len(values) % 2 == 0:
# If valid, store the values.
setattr(namespace, self.dest, values)
# You could convert the flat list to a list of 2-tuples, if needed:
# zip(values[::2], values[1::2])
else:
# Otherwise, invoke a parser error with a message.
parser.error('abs must be supplied as pairs')
ap = argparse.ArgumentParser()
ap.add_argument('z')
ap.add_argument('abs', nargs = '+', action = AbsAction)
opt = ap.parse_args()
print opt
谢谢,我用一个小小的黑客来解析'a''b'组合,现在错误得到妥善处理。 – deltap
import sys
def main(args):
print args[0]
print len(args)
print [arg for arg in args]
if __name__ == '__main__':
main(sys.argv)
谢谢你的建议,如果可能,我想坚持使用argparse。 – deltap
我想你可以读取的z,并把它弄出来的方式,然后读取的参数,以便休息(http://stackoverflow.com/questions/9027028/argparse-argument-order)和错误出如果他们的人数是奇数。 – approxiblue
你应该可以使用''nargs ='+'''读取其余的内容,然后可以使用自定义操作来检查偶数对。并作为@deshko提到的第一个位置参数可以指定为z与''nargs = 1'' 检查http://stackoverflow.com/questions/13174975/argparse-doesnt-check-for-positional-arguments为关于nargs的选择 – goofd