Python readline,使用Cmd接口完成制表选项
发布时间:2020-12-20 13:44:01 所属栏目:Python 来源:网络整理
导读:我在 Python中使用cmd.Cmd类为我的程序提供了一个简单的readline接口. 自包含的例子: from cmd import Cmdclass CommandParser(Cmd): def do_x(self,line): pass def do_xy(self,line): pass def do_xyz(self,line): passif __name__ == "__main__": parser
我在
Python中使用cmd.Cmd类为我的程序提供了一个简单的readline接口.
自包含的例子: from cmd import Cmd class CommandParser(Cmd): def do_x(self,line): pass def do_xy(self,line): pass def do_xyz(self,line): pass if __name__ == "__main__": parser = CommandParser() parser.cmdloop() 按两次选项卡将显示可能性.再次按下标签也是如此. 我的问题是,如何在第三个标签按下循环选项?在readline术语中我认为这称为Tab:menu-complete,但我看不到如何将它应用于Cmd实例. 我已经尝试过: readline.parse_and_bind('Tab: menu-complete') 在实例化解析器实例之前和之后.没运气. 我还尝试将“Tab:menu-complete”传递给Cmd构造函数.在这里也没有运气. 有谁知道它是如何完成的? 干杯! 解决方法
最简单的技巧是在菜单完成后添加一个空格:
parser = CommandParser(completekey="tab: menu-complete ") 执行的绑定表达式 readline.parse_and_bind(self.completekey+": complete") 然后会成为 readline.parse_and_bind("tab: menu-complete : complete") 第二个空格后的所有内容都被实际忽略,因此它与tab相同:menu-complete. 如果你不想依赖于readline解析的行为(我没有看到它的文档记录),你可以使用str的子类,拒绝扩展为completekey: class stubborn_str(str): def __add__(self,other): return self parser = CommandParser(completekey=stubborn_str("tab: menu-complete")) self.completekey“:complete”现在与self.completekey相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |