Не могу получить значение 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

Другие вопросы по тегам