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

时间:2018-02-07 02:40:14

标签: python 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.somefile一致地返回相同类型的结构(在列表中处理或不在列表中处理)?

1 个答案:

答案 0 :(得分:1)

删除nargs参数。

  

请注意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