无法从python 2.7中的命令行获取true / false值

时间:2016-04-22 22:48:39

标签: python python-2.7 namespaces arguments argparse

我试图在程序中加入一个标志:

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

我应该如何格式化?

1 个答案:

答案 0 :(得分:1)

您缺少解析步骤

args = parser.parse_args()

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

argparse是模块。 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.
https://docs.python.org/3/library/argparse.html#the-namespace-object

部分之前未提及

argparse.Namespace