Python 当type=argparse.FileType时如何指定argparse默认文件

Python 当type=argparse.FileType时如何指定argparse默认文件,python,argparse,Python,Argparse,我正在尝试允许一个可选参数,该参数接受文件名的单个命令行参数: parser.add_argument('--somefile', nargs=1, type=argparse.FileType('r'), required=False, default='defaultfile.json') 问题是,当我使用-somefile foo.json指定一个文件时,我在列表中得到了一个句柄: args.somefile=[<_io.TextIOWra

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

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.somefile=[<_io.TextIOWrapper name='foo.json' mode='r' encoding='UTF-8'>]
args.somefile=<_io.TextIOWrapper name='defaultfile.json' mode='r' encoding='UTF-8'>
如何使args.somefile在列表中或不在列表中一致地返回相同类型的结构句柄?

删除参数

请注意,nargs=1生成一个项目列表。这与默认情况不同,默认情况下,项目由自身生成

最新评论

删除nargs=1将消除指定filename参数的要求

让我们检查一下:

>>> 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

删除nargs=1将消除指定filename参数的要求。@Omniver,否,不是。你自己检查一下,谢谢。我在文档中读得不够多。”nargs-应该使用的命令行参数的数量。'尽管如此,稍后:'ArgumentParser对象通常将单个命令行参数与要执行的单个操作相关联。nargs关键字参数将不同数量的命令行参数与单个操作相关联。”