Linux上的Python cmd不会自动完成特殊字符或符号
发布时间:2020-12-14 00:34:50 所属栏目:Linux 来源:网络整理
导读:诸如 – 等的字符不会被 Python的基于readline的cmd模块解析为与字母数字ASCII字符相同的方式.这似乎只是Linux特定的问题,因为它似乎在Mac OS上按预期工作. 示例代码 import cmdclass Test(cmd.Cmd): def do_abc(self,line): print line def complete_abc(se
诸如 – 等的字符不会被
Python的基于readline的cmd模块解析为与字母数字ASCII字符相同的方式.这似乎只是Linux特定的问题,因为它似乎在Mac OS上按预期工作.
示例代码 import cmd class Test(cmd.Cmd): def do_abc(self,line): print line def complete_abc(self,text,line,begidx,endidx): return [i for i in ['-xxx','-yyy','-zzz'] if i.startswith(text)] try: import readline except ImportError: print "Module readline not available." else: import rlcompleter if 'libedit' in readline.__doc__: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") Test().cmdloop() Mac OS上的预期行为 (Cmd) abc <TAB> abc (Cmd) abc -<TAB> -xxx -yyy -zzz (Cmd) abc -x<TAB> (Cmd) abc -xxx Linux上的行为不正确 (Cmd) abc <TAB> abc (Cmd) abc -x<TAB> <Nothing> (Cmd) abc -<TAB> (Cmd) abc --<TAB> (Cmd) abc ---<TAB> (Cmd) abc ---- 我尝试添加 – 到cmd.Cmd.identchars,但它没有帮助. cmd.Cmd.identchars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-' 为什么Mac OS和Linux之间的readline解析存在差异,即使它们都使用GNU readline: 苹果系统: >>> readline.__doc__ 'Importing this module enables command line editing using GNU readline.' Linux的: >>> readline.__doc__ 'Importing this module enables command line editing using GNU readline.' 谢谢! 解决方法
在linux上,readline模块考虑 – 选项卡完成的分隔符.也就是说,在遇到 – 后,将尝试新的完成.
解决问题的方法是从readline用作分隔符的字符集中删除. 例如. old_delims = readline.get_completer_delims() readline.set_completer_delims(old_delims.replace('-','')) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |