在Python的Cmd.cmd中完成filename tab-completion
发布时间:2021-01-24 03:33:12 所属栏目:Python 来源:互联网
导读:我正在使用 Python的Cmd.cmd创建一个命令行工具,我想添加一个带有filename参数的“load”命令,它支持tab-completion. 参考this和this,我疯了这样的代码: import os, cmd, sys, yamlimport os.path as opimport glob as gbdef _complete_path(path): if op
我正在使用 Python的Cmd.cmd创建一个命令行工具,我想添加一个带有filename参数的“load”命令,它支持tab-completion. 参考this和this,我疯了这样的代码: import os,cmd,sys,yaml import os.path as op import glob as gb def _complete_path(path): if op.isdir(path): return gb.glob(op.join(path,'*')) else: return gb.glob(path+'*') class CmdHandler(cmd.Cmd): def do_load(self,filename): try: with open(filename,'r') as f: self.cfg = yaml.load(f) except: print 'fail to load the file "{:}"'.format(filename) def complete_load(self,text,line,start_idx,end_idx): return _complete_path(text) 这适用于cwd,但是,当我想进入subdir时,在subdir /之后,complete_load函数的“text”变为空白,所以_complete_path func再次返回cwd. 我不知道如何使用tab-completion获取subdir的内容. 解决方法您的主要问题是readline库基于它的默认分隔符集来分隔事物:import readline readline.get_completer_delims() # yields ' tn`~!@#$%^&*()-=+[{]}|;:'",<>/?' 当tab填写文件名时,我删除了这个但是空白的所有内容. import readline readline.set_completer_delims(' tn') 设置分隔符后,完成功能的’text’参数应该更符合您的预期. 这也解决了选项卡完成时复制部分文本时常见的问题. (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容