Python argparse:默认参数存储为字符串,而不是列表

时间:2014-08-16 20:51:28

标签: python command-line-arguments argparse

我无法从文档中找出argparse的这种行为:

import argparse

parser.add_argument("--host", metavar="", dest="host", nargs=1, default="localhost", help="Name of host for database.  Default is 'localhost'.")
args = parser.parse_args()
print(args)

以下是带有和不带参数的输出" - host":

>> python demo.py
Namespace(host='localhost')

>> python demo.py --host host
Namespace(host=['host'])

特别是:为什么要对" - 主持人"在指定时存储在列表中但在使用默认值时不存储?

3 个答案:

答案 0 :(得分:17)

删除“nargs”关键字参数。一旦定义了这个参数,argparse假定你的参数将是一个列表(nargs = 1意味着一个包含1个元素的列表)

答案 1 :(得分:0)

作为替代方便的模块:Docopt可用于解析命令行参数。 Docopt通过定义 doc 中的值将命令行转换为字典。

答案 2 :(得分:0)

问题标题和问题正文提出两个不同的问题。这可能是我与 OP 分享的困惑的迹象。

标题:为什么默认是字符串而不是列表? 正文:为什么给定的值是一个列表而不是一个字符串?

所选答案提供了正文中问题的解决方案。标题中问题的答案是:

条目 default="localhost"default 设置为 "localhost",这是一个刺痛。要将其设置为列表,您可以使用:default=["localhost"].