2013-07-29 241 views
2

我一直使用Google搜索了将近一个小时,并且只是卡住了。Python命令参数

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

例如蟒stupidadder.py 4

打印6

蟒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 

我不能找到一个简单的回答这个任何地方。该文件是如此混乱。 :(有人可以帮忙吗?请和谢谢:)

+0

你为什么需要它添加2? –

+0

搜索'python命令行参数',你一定会找到有用的链接。例如,第一个链接为您提供了Claudiu描述的技术。 – keyser

回答

4

我不完全确定你的目标是什么。但是,如果这是字面上所有你需要做的,你没有得到很复杂:

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 
+0

谢谢!无论出于何种原因,python文档中的例子都没有提到这一点。 http://docs.python.org/2/library/argparse.html文本传递,但我希望从这个python页面更可读/可用的东西。 – user1601118

9

假设您正在学习如何使用argparse模块,那么您非常接近。该参数是返回的参数对象的一个​​属性,被引用为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 
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文档的Namespace部分。

+0

说实话,我会为可怕的第一部分(imo,哈哈)-1和'vars'技巧+ 1,如果需要字典非常有用。 – JeromeJ

1

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

x = args.x