如何从 `argparse` 获取所有默认值?
How to grab all defaults from `argparse`?
我有一个像这样的参数解析器:
def args_parser():
parser = argparse.ArgumentParser(description='myparser')
parser.add_argument('--k', type=int, default=100, help = 'numbers')
return parser
现在,我只想获取默认映射,如下所示:
args = args_parser()
然后我希望 args['k']
到 return 100
,因为这是默认值。我该如何做到这一点?
这应该可以为您做到这一点。我认为您也应该能够在 ArgumentParser
上的 Python 文档中找到它:
vars(args.parse_args())['k']
您需要在您的解析器对象上调用 .parse_args() 函数,以便实际 return command-line 参数被解析并分配给您的 .[ 中定义的属性=19=]() 语句。所以像:
parser = args_parser()
args = parser.parse_args()
k_value = args.k
由 .parse_args() 编辑的 'args' 变量 return 将具有与您通过 .add_argument() 调用分配给它的名称相对应的属性, 尽管如果没有默认值且用户未提供给定参数,则其值将为 'None'.
def args_parser():
parser = argparse.ArgumentParser(description='myparser')
parser.add_argument('--k', type=int, default=100, help = 'numbers')
return parser
parser = args_parser():
args = parser.parse_args([])
print(args) # see all values
print(args.k) # see just the k attribute
parse_args()
解析命令行中提供的 sys.argv
。 parse_args([])
解析一个空列表,就像您调用不带参数的脚本一样。我定期使用这样的调用测试解析器设置。
根据您的参数定义,[]
工作正常并显示默认的 k
值。对于其他定义,[]
可能会产生错误。例如,如果您包括
parser.add_argument('infile', help='positional file name')
现在需要一个字符串。对于像这样的简单位置,不需要默认值也没有意义。但其他参数组合可以使用默认值。
我可以向您展示如何访问 add_argument
命令中设置的 default
,但这涉及一些未记录的功能。此外,还有多种定义默认值的方法,因此主题可能会变得复杂。
无论如何,只需 运行 带有空列表的 parse_args
通常就足够了。
您还可以通过添加一点使其在帮助行中显示默认值:
parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s')
例如,在交互式 ipython
会话中:
In [73]: parser=argparse.ArgumentParser()
In [74]: parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s')
Out[74]: _StoreAction(option_strings=['--k'], dest='k', nargs=None,
const=None, default=100, type=<class 'int'>, choices=None,
help='numbers, %(default)s', metavar=None)
In [75]: parser.print_help()
usage: ipython3 [-h] [--k K]
optional arguments:
-h, --help show this help message and exit
--k K numbers, 100
In [76]: parser.parse_args([]) # displays args
Out[76]: Namespace(k=100)
In [78]: parser.parse_args(['--k','200'])
Out[78]: Namespace(k=200)
我有一个像这样的参数解析器:
def args_parser():
parser = argparse.ArgumentParser(description='myparser')
parser.add_argument('--k', type=int, default=100, help = 'numbers')
return parser
现在,我只想获取默认映射,如下所示:
args = args_parser()
然后我希望 args['k']
到 return 100
,因为这是默认值。我该如何做到这一点?
这应该可以为您做到这一点。我认为您也应该能够在 ArgumentParser
上的 Python 文档中找到它:
vars(args.parse_args())['k']
您需要在您的解析器对象上调用 .parse_args() 函数,以便实际 return command-line 参数被解析并分配给您的 .[ 中定义的属性=19=]() 语句。所以像:
parser = args_parser()
args = parser.parse_args()
k_value = args.k
由 .parse_args() 编辑的 'args' 变量 return 将具有与您通过 .add_argument() 调用分配给它的名称相对应的属性, 尽管如果没有默认值且用户未提供给定参数,则其值将为 'None'.
def args_parser():
parser = argparse.ArgumentParser(description='myparser')
parser.add_argument('--k', type=int, default=100, help = 'numbers')
return parser
parser = args_parser():
args = parser.parse_args([])
print(args) # see all values
print(args.k) # see just the k attribute
parse_args()
解析命令行中提供的 sys.argv
。 parse_args([])
解析一个空列表,就像您调用不带参数的脚本一样。我定期使用这样的调用测试解析器设置。
根据您的参数定义,[]
工作正常并显示默认的 k
值。对于其他定义,[]
可能会产生错误。例如,如果您包括
parser.add_argument('infile', help='positional file name')
现在需要一个字符串。对于像这样的简单位置,不需要默认值也没有意义。但其他参数组合可以使用默认值。
我可以向您展示如何访问 add_argument
命令中设置的 default
,但这涉及一些未记录的功能。此外,还有多种定义默认值的方法,因此主题可能会变得复杂。
无论如何,只需 运行 带有空列表的 parse_args
通常就足够了。
您还可以通过添加一点使其在帮助行中显示默认值:
parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s')
例如,在交互式 ipython
会话中:
In [73]: parser=argparse.ArgumentParser()
In [74]: parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s')
Out[74]: _StoreAction(option_strings=['--k'], dest='k', nargs=None,
const=None, default=100, type=<class 'int'>, choices=None,
help='numbers, %(default)s', metavar=None)
In [75]: parser.print_help()
usage: ipython3 [-h] [--k K]
optional arguments:
-h, --help show this help message and exit
--k K numbers, 100
In [76]: parser.parse_args([]) # displays args
Out[76]: Namespace(k=100)
In [78]: parser.parse_args(['--k','200'])
Out[78]: Namespace(k=200)