argparse只有一个命令行参数

时间:2013-02-16 22:48:42

标签: python argparse

我正在尝试使用argparse实现命令行参数,其方式只接受none或once。应该拒绝多次出现。

我使用以下代码

#!/usr/bin/env python3
import argparse
cmd_parser = argparse.ArgumentParser()
cmd_parser.add_argument('-o', dest='outfile')
cmd_line = cmd_parser.parse_args()
print(cmd_line.outfile)

一个参数给出了预期的结果:

./test.py -o file1
file1

当两次发出参数时,第一次出现时会被忽略:

./test.py -o file1 -o file2
file2

我还尝试了nargs=1action='store',但没有达到预期效果。

如何告诉argparse拒绝多个参数出现?

1 个答案:

答案 0 :(得分:7)

可以使用自定义操作进行排列:

import argparse

class Once(argparse.Action):
    def __init__(self, *args, **kwargs):
        super(Once, self).__init__(*args, **kwargs)
        self._count = 0

    def __call__(self, parser, namespace, values, option_string=None):
        # print('{n} {v} {o}'.format(n=namespace, v=values, o=option_string))
        if self._count != 0:
            msg = '{o} can only be specified once'.format(o=option_string)
            raise argparse.ArgumentError(None, msg)
        self._count = 1
        setattr(namespace, self.dest, values)

cmd_parser = argparse.ArgumentParser()
cmd_parser.add_argument('-o', dest='outfile', action=Once, default='/tmp/out')
cmd_line = cmd_parser.parse_args()
print(cmd_line.outfile)

您可以指定默认值:

% script.py 
/tmp/out

您可以指定-o一次:

% script.py -o file1 
file1

但是指定-o两次会引发错误:

% script.py -o file1 -o file2
usage: script.py [-h] [-o OUTFILE]
script.py: error: -o can only be specified once
相关问题