我使用own解析来摘要文本命令,而不是试图提交我自己的自定义解析器,但是代码路径并不明显。请考虑以下几点:
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__方法没有被调用(讽刺)。
发布于 2018-12-06 20:57:45
您不是将命令绑定到文字字符串read和exit;argparse不是这样工作的。相反,您正在定义一个解析器,它接受两个任意的单词,并将第一个单词绑定到read,第二个绑定到exit。无论您输入哪个单词,您的注释代码都会退出,而不仅仅是exit。如果没有注释,解析器将需要两个单词,并在只提供一个单词时引发一个错误。
如果您打算(Ab)以这种方式使用argparse,我建议您阅读文档中的子命令。
https://stackoverflow.com/questions/53659503
复制相似问题