我已经用谷歌搜索了将近一个小时,但卡住了。
对于脚本 stupidadder.py,它将 2 添加到命令 arg。
例如python stupidadder.py 4
打印 6
python stupidadder.py 12
打印 14
到目前为止我已经用谷歌搜索了:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('x', metavar='x', type=int, nargs='+',
help='input number')
...
args = parser.parse_args()
print args
x = args['x'] # fails here, not sure what to put
print x + 2
我在任何地方都找不到直接的答案。文档太混乱了。 :( 有人可以帮忙吗?谢谢。:)
假设您正在学习如何使用 argparse 模块,那么您已经非常接近了。参数是返回的 args 对象的一个属性,被引用为
x = args.x
。
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('x', metavar='x', type=int, nargs='+',
help='input number')
...
args = parser.parse_args()
print args
#x = args['x'] # fails here, not sure what to put
x = args.x
print x + 2
使用您的代码在 Ipython 中运行的示例,显示 args 是一个简单的对象,而不是字典。在 argparse 代码中,使用
getattr
和 setattr
访问命名空间
In [4]: args=parser.parse_args(['12','4','5'])
In [5]: args
Out[5]: Namespace(x=[12, 4, 5])
In [6]: args['x']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-3867439e1f91> in <module>()
----> 1 args['x']
TypeError: 'Namespace' object is not subscriptable
In [7]: args.x
Out[7]: [12, 4, 5]
In [8]: getattr(args,'x')
Out[8]: [12, 4, 5]
In [9]: sum(getattr(args,'x'))
Out[9]: 21
vars()
可用于将命名空间变成字典。
In [12]: vars(args)['x']
Out[12]: [12, 4, 5]
查看 argparse 文档的命名空间部分。
你应该简单地做这样的事情:
x = args.x
当您直接操作
args
命名空间对象时,就好像它是一个字典一样,它引发了一个
TypeError: 'Namespace' object is not subscriptable
我的快速、个性化和丑陋的解决方法是访问内部字典 使用内部
__dict__
类型
user_args =
args.__dict__
如果您需要遍历参数并过滤它,这将非常有用
也可能是您有多个单词变量,例如(此处带有破折号):
parser.add_argument('-d', '--extracted-dir', type=str,...
要访问它,您可以使用:
args.extracted_dir
你可能尝试过做
args['extracted-dir']
这就是你得到错误的原因。
我不完全确定你的目标是什么。但如果这就是你要做的全部,你不必变得非常复杂:
import sys
print int(sys.argv[1]) + 2
这里是相同的,但有一些更好的错误检查:
import sys
if len(sys.argv) < 2:
print "Usage: %s <integer>" % sys.argv[0]
sys.exit(1)
try:
x = int(sys.argv[1])
except ValueError:
print "Usage: %s <integer>" % sys.argv[0]
sys.exit(1)
print x + 2
示例用法:
C:\Users\user>python blah.py
Usage: blah.py <integer>
C:\Users\user>python blah.py ffx
Usage: blah.py <integer>
C:\Users\user>python blah.py 17
19