2016-04-22 60 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