22

我已经在谷歌上搜索了将近一个小时,只是被卡住了。

对于一个脚本,stupidadder.py,它将 2 添加到命令 arg。

例如python愚蠢的adder.py 4

打印 6

蟒蛇笨蛋.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

我在任何地方都找不到直接的答案。文档太混乱了。:(有人可以帮忙吗?请谢谢。:)

4

5 回答 5

38

假设您正在学习如何使用 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
于 2013-07-29T21:21:55.017 回答
12

使用您的代码在 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 文档的命名空间部分。

于 2013-07-30T01:06:06.840 回答
2

当您像字典一样直接操作argsNamespace 对象时,它会引发一个

TypeError: 'Namespace' object is not subscriptable

__dict__我快速、个人化和丑陋的解决方法是使用内部类型访问内部字典

用户参数 =args.__dict__

如果您需要迭代参数并过滤它,这非常有用

于 2020-02-02T15:01:44.613 回答
2

你应该简单地做这样的事情:

x = args.x
于 2017-09-27T10:02:41.450 回答
-2

我不完全确定你的目标是什么。但如果这就是你所要做的一切,你不必变得非常复杂:

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
于 2013-07-29T21:05:23.910 回答