我试图在程序中加入一个标志:
python2.7 hello.py --showxy
和argparse
给了我麻烦。
这是我的示例测试代码:
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
我应该如何格式化?
答案 0 :(得分:1)
您缺少解析步骤
args = parser.parse_args()
args = argparse.Namespace()
只会创建一个新的空Namespace
对象。
argparse
是模块。 parser
是ArgumentParser
个对象。 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.
在https://docs.python.org/3/library/argparse.html#the-namespace-object 部分之前未提及 argparse.Namespace