如何访问名称中带有点的 python argparse 参数

gol*_*lum 7 python argparse

Python 的 argparse 允许我定义名称中包含点的参数名称。但我怎样才能访问这些呢?

import argparse


parser = argparse.ArgumentParser()
parser.add_argument("inputfile.txt")
parser.add_argument("outputfile.txt")

args = parser.parse_args(['hello', 'world'])

# now args is:
# Namespace(inputfile.txt='hello', outputfile.txt='world')


# and this does not work
print(args.inputfile.txt)
>>> AttributeError: 'Namespace' object has no attribute 'inputfile'
Run Code Online (Sandbox Code Playgroud)

显然,可以使用名称中的点来创建属性名称,但是如何访问这些属性名称呢?

编辑:我的目标是让 argparse 显示 inputfile.txt 名称(例如使用 --help),但调用属性“inputfile”。

尝试了一些建议后,完成此操作的最简单方法是使用元变量选项:

parser.add_argument("inputfile", metavar="inputfile.txt")
Run Code Online (Sandbox Code Playgroud)

lem*_*ead 5

在内部,argparse会将所有属性添加到Namespace()带有setattr. 因此,您可以使用以下方式访问这些值getattr

getattr(args, 'inputfile.txt')
Run Code Online (Sandbox Code Playgroud)

然而,这并不直观,通常应避免带有点的属性名称。建议使用dest选项来argparse.add_argument定义自己的变量来存储该参数的值,正如 hd1 在他们的答案中建议的那样。