Python argparse 在指定和未指定参数时有两个默认值
Python argparse with two defaults when the argument is and is not specified
参数-f
,我要
- 在命令中未指定时使用默认值。
- 在命令中指定但未给出任何值时使用另一个默认值
- 允许用户为此参数提供单个或多个值
如果您只想为您的选项消耗一个值,那么您问题评论中的代码就足够了。
如果您希望选项有多个参数,则不能在 add_argument 中使用 const(nargs 需要 '?'),相反您可以使用 subclass Action class(在 argparse 中找到):
class FAction(argparse.Action):
#The default to use in case the option is provided by
#the user, you can make it local to __call__
__default2 = 'def2'
#__call__ is called if the user provided the option
def __call__(self, parser, namespace, values, option_string=None):
#If the option f is provided with no arguments
#then use __default2 which is the second default
#if values length is 0< then use what the user
#has provided
if len(values) == 0:
values = self.__default2
setattr(namespace, self.dest, values)
parser = argparse.ArgumentParser(description='Program arguments')
parser.add_argument('-f', default='def', nargs='*', action=FAction)
args = parser.parse_args()
print(args.f)
参数-f
,我要
- 在命令中未指定时使用默认值。
- 在命令中指定但未给出任何值时使用另一个默认值
- 允许用户为此参数提供单个或多个值
如果您只想为您的选项消耗一个值,那么您问题评论中的代码就足够了。
如果您希望选项有多个参数,则不能在 add_argument 中使用 const(nargs 需要 '?'),相反您可以使用 subclass Action class(在 argparse 中找到):
class FAction(argparse.Action):
#The default to use in case the option is provided by
#the user, you can make it local to __call__
__default2 = 'def2'
#__call__ is called if the user provided the option
def __call__(self, parser, namespace, values, option_string=None):
#If the option f is provided with no arguments
#then use __default2 which is the second default
#if values length is 0< then use what the user
#has provided
if len(values) == 0:
values = self.__default2
setattr(namespace, self.dest, values)
parser = argparse.ArgumentParser(description='Program arguments')
parser.add_argument('-f', default='def', nargs='*', action=FAction)
args = parser.parse_args()
print(args.f)