argparse
将类型转换应用于选项的参数,如果默认值为字符串,则应用于默认值。但是,对于位置参数,它似乎没有这样做:
import argparse as ap
p = ap.ArgumentParser()
p.add_argument('file', nargs='*',
metavar='FILE',
default='-',
type=ap.FileType(),
help='Input files. - is stdin. Default: %(default)s')
print(p.parse_args([]))
# Namespace(file='-')
print(p.parse_args(['-']))
# Namespace(file=[<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>])
(Ideone)
如果我将file
更改为--file
以便这些是选项参数,default
值将按预期转换。
我有没有比明确传递argparse.FileType()('-')
作为default
?
答案 0 :(得分:1)
放入sys.argv
的值始终是str
个对象,因为底层操作系统构造是一个数组是C字符指针。您需要type
将它们转换为其他Python类型。
然而,default
的值没有这样的限制。您可以为该关键字参数使用您喜欢的任何类型的值。
p.add_argument('file',
nargs='*',
metavar='FILE',
default=[sys.stdin],
type=ap.FileType(),
help='Input files. - is stdin. Default: standard input')
我修改了帮助;获取repr(sys.stdin)
的值并不是特别有用,并且不应该通过描述默认值而不是指定精确的Python对象来混淆用户。