gpt4 book ai didi

python - 如何使 argparse 将类型转换应用于位置参数的默认值?

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:17 24 4
gpt4 key购买 nike

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()('-') 作为默认值,我还有其他更好的选择吗?

最佳答案

放入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 对象而感到困惑。

关于python - 如何使 argparse 将类型转换应用于位置参数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42297956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com