我无法从文档中找出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'])
特别是:为什么要对" - 主持人"在指定时存储在列表中但在使用默认值时不存储?
答案 0 :(得分:17)
删除“nargs”关键字参数。一旦定义了这个参数,argparse假定你的参数将是一个列表(nargs = 1意味着一个包含1个元素的列表)
答案 1 :(得分:0)
作为替代方便的模块:Docopt可用于解析命令行参数。 Docopt通过定义 doc 中的值将命令行转换为字典。
答案 2 :(得分:0)
问题标题和问题正文提出两个不同的问题。这可能是我与 OP 分享的困惑的迹象。
标题:为什么默认是字符串而不是列表? 正文:为什么给定的值是一个列表而不是一个字符串?
所选答案提供了正文中问题的解决方案。标题中问题的答案是:
条目 default="localhost"
将 default
设置为 "localhost"
,这是一个刺痛。要将其设置为列表,您可以使用:default=["localhost"]
.