如何添加可选参数或一次参数?

Ale*_*lex 5 python argparse

如何添加可选且不得多次指定的参数?

有效的:

$ ./my.py
$ ./my.py --arg MyArgValue
Run Code Online (Sandbox Code Playgroud)

无效的:

$ ./my.py --arg MyArgValue --arg ThisIsNotValid
Run Code Online (Sandbox Code Playgroud)

如果我添加一个参数,如:

parser.add_argument('--arg', type=str)
Run Code Online (Sandbox Code Playgroud)

无效示例产生一个字符串ThisIsNotValid。我预计会出现解析器错误。

Rob*_*obᵩ 4

创建一个自定义操作,如果相同的参数出现两次,该操作将引发异常。当解析器捕获异常时,它会打印用法和格式良好的错误消息。

import argparse

class Highlander(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if getattr(namespace, self.dest, None) is not None:
            raise argparse.ArgumentError(self, 'There can be only one.')
        setattr(namespace, self.dest, values)

parser = argparse.ArgumentParser()
parser.add_argument('-f', action=Highlander)
print (parser.parse_args('-f 1 -f 2'.split()))
Run Code Online (Sandbox Code Playgroud)