如何添加可选参数或once参数?

2024-09-30 20:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

如何添加可选参数且不能多次指定?在

有效期:

$ ./my.py
$ ./my.py --arg MyArgValue

无效:

^{pr2}$

如果我加上一个论点,比如:

parser.add_argument('--arg', type=str)

无效的示例导致字符串ThisIsNotValid。我认为解析器会出错。在


Tags: 字符串pyaddparser示例参数mytype
3条回答

您可以使用它来获取此事件的发生次数,如果它不止一次,则会生成一个错误。在

'append' - This stores a list, and appends each argument value to the list. This is useful to allow an option to be specified multiple times. Example usage:

import argparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('-arg', type='str', action='append')
args = parser.parse_args()
if len(args.arg) > 1:
    sys.exit('Invalid')
MyArgValue = args.arg[0]

有关“append”的文档可在此处找到,以了解更多详细信息:

http://docs.python.org/dev/library/argparse.html#action

不幸的是,对于argparse没有更简单的方法。这大概是因为这还不够常见。通常,此计数用于布尔值情况,如冗余模式。当您有附加字符串时,例如带有include路径的编译器,等等,它们通常都是受尊重的。在

也许,你也可以使用nargs,只使用args.arg_名称[0]忽略其余部分。您可以在这里找到nargs文档:

http://docs.python.org/dev/library/argparse.html#nargs

这看起来像是一个老生常谈的解决方案,但会得到你想要的。使用appendaction

parser.add_argument('-arg', type=str, action='append')
args = parser.parse_args()
if len(args.arg) > 1:
    sys.exit("Only one argument is allowed for '-arg'")
elif len(args.arg) == 1: # elif is because it is valid for the length to be 0
    args.arg = args.arg[0]

append操作将从命令行创建一个列表,其中包含调用此参数时的所有值。如果此列表的长度大于1,则出现错误。在

通过这种方式,您可以从命令行获取值,如果有多个值,您可以将其捕获为错误并通知用户。在

创建一个自定义操作,该操作在同一参数出现两次时引发异常。当解析器捕捉到异常时,它将输出用法和格式良好的错误消息。在

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()))

相关问题 更多 >