Не могу получить значение true/false из командной строки в python 2.7
Я пытаюсь включить флаг в программу:
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 ответ
Вы пропускаете шаг разбора
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.
argparse.Namespace
не упоминается до раздела https://docs.python.org/3/library/argparse.html