加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 编程开发 > Python > 正文

在Python的Cmd.cmd中完成filename tab-completion

发布时间:2021-01-24 07:44:45 所属栏目: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’参数应该更符合您的预期.

这也解决了选项卡完成时复制部分文本时常见的问题.

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读