Я использую argparse для анализа текстовых команд вместо того, чтобы пытаться развернуть свой собственный анализатор, но путь к коду не очевиден.Примите во внимание следующее:
import argparse
##class ReadAction(argparse.Action):
## def __init__(self, option_strings, dest, nargs=None, **kwargs):
## if nargs is not None:
## raise ValueError("nargs not allowed")
## super(ReadAction, self).__init__(option_strings, dest, **kwargs)
## def __call__(self, parser, namespace, values, option_strings=None):
## print("Read a file")
## setattr(namespace, self.dest, values)
class ExitAction(argparse.Action):
def __init__(self, option_strings, dest, nargs=None, **kwargs):
if nargs is not None:
raise ValueError("nargs not allowed")
super(ExitAction, self).__init__(option_strings, dest, **kwargs)
def __call__(self, parser, namespace, values, option_strings=None):
print("Exiting the program")
setattr(namespace, self.dest, values)
def setup_parser(parser):
## parser.add_argument('read', help='Reads in a file', action=ReadAction)
parser.add_argument('exit', help='Exit command', action=ExitAction)
def run():
parser = argparse.ArgumentParser()
setup_parser(parser)
while True:
raw_input = input("Command >>>").split(' ')
args = parser.parse_args(raw_input)
print(args)
print('Good bye')
if __name__ == '__main__':
run()
Если я запустил его как есть, я получу ожидаемый результат:
Command >>>exit
Exiting the program
Namespace(exit='exit')
Но если я уберу комментарии и запустлю снова, я получу это неожиданноеПоведение:
Command >>>exit
Read a file
usage: prog.py [-h] read exit
prog.py: error: the following arguments are required: exit
Кто-нибудь понимает путь кода через это?Как будто метод __call__ не вызывается (иронично).