【发布时间】:2018-12-06 20:52:41
【问题描述】:
我使用 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')
但如果我取出 cmets 并再次运行,我会得到这种意外行为:
Command >>>exit
Read a file
usage: prog.py [-h] read exit
prog.py: error: the following arguments are required: exit
有没有人理解这个代码路径?就像没有调用 __call__ 方法(讽刺)。
【问题讨论】: