argparse:如何获取名称无法正常访问的位置参数?
argparse: How to get positional argument with name that can't be accessed normally?
如何在不重命名的情况下获取参数 "IP/DOMAIN"
?我不想重命名它,因为我希望 -h
专门显示 "IP/DOMAIN"
而不是像 "IP_DOMAIN"
.
这样的东西
parser = argparse.ArgumentParser()
parser.add_argument('PORT', help='')
parser.add_argument('IP/DOMAIN', help='')
args = parser.parse_args()
我能做到:
args.PORT
但是我做不到:
args.IP/DOMAIN
什么也不起作用:
args["IP/DOMAIN"]
args[0]
一个简单的设置:
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
In [3]: a1 = parser.add_argument('IP/DOMAIN')
In [4]: a2 = parser.add_argument('easy', metavar='IP/DOMAIN')
通过 metavar
我们可以提供一个易于使用的 dest
:
In [5]: parser.print_help()
usage: ipython3 [-h] IP/DOMAIN IP/DOMAIN
positional arguments:
IP/DOMAIN
IP/DOMAIN
optional arguments:
-h, --help show this help message and exit
查看解析结果:
In [6]: arg = parser.parse_args('foo bar'.split())
In [7]: arg
Out[7]: Namespace(easy='bar', **{'IP/DOMAIN': 'foo'})
如果名字简单,一个有效的Python变量,我们可以使用属性访问:
In [8]: arg.easy
Out[8]: 'bar'
但对于一般用途,getattr
有效。 argparse
实际上使用这个(和 setattr
)来最小化它对你的假设 dest
:
In [9]: getattr(arg, 'IP/DOMAIN')
Out[9]: 'foo'
我们还可以将命名空间转换为 dict
:
In [10]: vars(arg)
Out[10]: {'IP/DOMAIN': 'foo', 'easy': 'bar'}
In [11]: vars(arg)['IP/DOMAIN']
Out[11]: 'foo'
如何在不重命名的情况下获取参数 "IP/DOMAIN"
?我不想重命名它,因为我希望 -h
专门显示 "IP/DOMAIN"
而不是像 "IP_DOMAIN"
.
parser = argparse.ArgumentParser()
parser.add_argument('PORT', help='')
parser.add_argument('IP/DOMAIN', help='')
args = parser.parse_args()
我能做到:
args.PORT
但是我做不到:
args.IP/DOMAIN
什么也不起作用:
args["IP/DOMAIN"]
args[0]
一个简单的设置:
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
In [3]: a1 = parser.add_argument('IP/DOMAIN')
In [4]: a2 = parser.add_argument('easy', metavar='IP/DOMAIN')
通过 metavar
我们可以提供一个易于使用的 dest
:
In [5]: parser.print_help()
usage: ipython3 [-h] IP/DOMAIN IP/DOMAIN
positional arguments:
IP/DOMAIN
IP/DOMAIN
optional arguments:
-h, --help show this help message and exit
查看解析结果:
In [6]: arg = parser.parse_args('foo bar'.split())
In [7]: arg
Out[7]: Namespace(easy='bar', **{'IP/DOMAIN': 'foo'})
如果名字简单,一个有效的Python变量,我们可以使用属性访问:
In [8]: arg.easy
Out[8]: 'bar'
但对于一般用途,getattr
有效。 argparse
实际上使用这个(和 setattr
)来最小化它对你的假设 dest
:
In [9]: getattr(arg, 'IP/DOMAIN')
Out[9]: 'foo'
我们还可以将命名空间转换为 dict
:
In [10]: vars(arg)
Out[10]: {'IP/DOMAIN': 'foo', 'easy': 'bar'}
In [11]: vars(arg)['IP/DOMAIN']
Out[11]: 'foo'