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

在Python的Cmd.cmd中完成filename tab-completion,第1张

概述我正在使用 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,yamlimport os.path as opimport glob as gbdef _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 readlinereadline.get_completer_delims()# yIElds ' \t\n`~!@#$%^&*()-=+[{]}\|;:\'",<>/?'

当tab填写文件名时,我删除了这个但是空白的所有内容.

import readlinereadline.set_completer_delims(' \t\n')

设置分隔符后,完成功能的’text’参数应该更符合您的预期.

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

总结

以上是内存溢出为你收集整理的在Python的Cmd.cmd中完成filename tab-completion全部内容,希望文章能够帮你解决在Python的Cmd.cmd中完成filename tab-completion所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206862.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存