如何在type = argparse.filetype时指定argparse默认文件



我正在尝试允许一个可选的参数,该参数获取文件名的单个命令行参数:

parser.add_argument('--somefile', nargs=1, type=argparse.FileType('r'),
                     required=False, default='defaultfile.json')

问题是当我使用--somefile foo.json指定文件时,我会在列表中获得一个句柄:

args.somefile=[<_io.TextIOWrapper name='foo.json' mode='r' encoding='UTF-8'>]

当我不指定并想要默认值时,我会回到句柄,但不在列表中:

args.somefile=<_io.TextIOWrapper name='defaultfile.json' mode='r' encoding='UTF-8'>

我如何获得Args.FOLE。要始终如一地返回相同类型的结构(在列表中或不在列表中的操作(?

删除 nargs参数。

请注意,nargs=1会产生一个项目的列表。这与默认产品本身产生的默认值不同。

在注释上更新

删除nargs=1将消除指定文件名参数的要求。

让我们检查:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--somefile', type=argparse.FileType('r'), required=False, default='/tmp/data.json')
_StoreAction(option_strings=['--somefile'], dest='somefile', nargs=None, const=None, default='/tmp/data.json', type=FileType('r'), choices=None, help=None, metavar=None)
>>> args = parser.parse_args(['--somefile',])
usage: [-h] [--somefile SOMEFILE]
: error: argument --somefile: expected one argument

最新更新