2016-04-22 63 views
0

我试图将一个标志为节目得到命令行真/假值:不能在Python 2.7

python2.7 hello.py --showxy 

和​​是给我找麻烦。

这是我的例子测试代码:

import os 
import sys 
import argparse 

print (os.getcwd()) 
print ("___________________________________________________") 
print ("A: " + sys.argv[0]) 
print ("B: " + sys.argv[1]) 
print ("C: " + sys.argv[2]) 
print ("___________________________________________________") 


parser = argparse.ArgumentParser() 
parser.add_argument('--showxy', action='store_true') 
args = argparse.Namespace() 
d = vars(args) 


print Namespace() 

虽然我应该越来越:

Namespace(showxy=True) 

其实得到一个错误:

A: hello.py 
B: haarcascade_frontalface_default.xml 
C: euromil.jpg 
___________________________________________________ 
Traceback (most recent call last): 
    File "hello.py", line 19, in <module> 
    print Namespace() 

NameError: name 'Namespace' is not defined 

我应该如何成为f这是什么?

+1

为什么你认为你应该* *越来越呢? 'Namespace'在'argparse'之下,并且您已经以'argparse.Namespace()'的形式访问它。你为什么认为调用'Namespace'会起作用? – idjaw

+0

你甚至没有调用'parser.parse_args()'。你为什么试图直接调用'Namespace'? – user2357112

回答

1

你缺少分析步骤

args = parser.parse_args() 

args = argparse.Namespace()只是创建一个新的空Namespace对象。

​​是模块。 parserArgumentParser的对象。 Namespace是在该模块中定义的类。 parse_args创建一个Namespace,使用它从sys.argv解析的值填充该值,并将其返回为args

定义parser本身不做任何解析。


的第一个例子中的文档是:

import argparse 

parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument('integers', metavar='N', type=int, nargs='+', 
        help='an integer for the accumulator') 
parser.add_argument('--sum', dest='accumulate', action='store_const', 
        const=sum, default=max, 
        help='sum the integers (default: find the max)') 

args = parser.parse_args() 
print(args.accumulate(args.integers)) 

有人声称这是初学者太先进,但关键件的存在。

parser = ... 
parser.add_argument... 
args = parser.parse_args() 
# look at args, print it, access attributes, etc. 

argparse.Namespace没有被提及,直到节https://docs.python.org/3/library/argparse.html#the-namespace-object

+0

明白了。那是在命名空间之前还是之后? – Rich

+1

你通常不需要自己创建一个'Namespace'。 'parse_args'为你做。 (您可以创建一个名称空间并将其传递给parse_args,但这是高级用法)。您可能需要查看'argparse'文档和/或教程。 – hpaulj

+0

好了,现在我得到了:''AttributeError:'module'object has no attribute'parse_args'' – Rich