您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何执行python命令行自动完成,但不仅仅是在字符串的开头

5b51 2022/1/14 8:22:59 python 字数 2950 阅读 554 来源 www.jb51.cc/python

Python,通过它的readline绑定允许很好的命令行自动完成(如 here中所述). 但是,完成似乎只在字符串的开头起作用.如果要匹配字符串的中间或结尾,则readline不起作用. 我想在命令行python程序中自动完成字符串,方法是将我输入的内容与可用字符串列表中的任何字符串进行匹配. >我想要的自动填充类型的一个很好的例子是当你输入To字段时在GMail中发生的类型.如果您输入其中一个

概述

但是,完成似乎只在字符串的开头起作用.如果要匹配字符串的中间或结尾,则readline不起作用.

我想在命令行python程序中自动完成字符串,方法是将我输入的内容与可用字符串列表中的任何字符串进行匹配.

>我想要的自动填充类型的一个很好的例子是当你输入To字段时在GMail中发生的类型.如果您输入其中一个联系人的姓氏,它就会像您输入她的名字一样出现.
>可能需要使用向上和向下箭头或某些其他方法从匹配的字符串中进行选择(在readline的情况下不需要),在我的情况下这很好.
>我的特定用例是一个发送电子邮件的命令行程序.
>具体的代码示例将非常有用.

使用像curses这样的终端模拟器会很好.它只需要在Linux上运行,而不是在Mac或Windows上运行.

这是一个例子:
假设我在列表中有以下三个字符串

['Paul Eden <paul@domain.com>','Eden Jones <ejones@domain.com>','Somebody Else <somebody@domain.com>']

我想要一些代码,在我输入’Eden’后自动完成列表中的前两项,然后允许我选择其中一项(通过命令行使用键盘完成).

#!/usr/bin/env python

import readline

readline.clear_history()
readline.add_history('foo')
readline.add_history('bar')

while 1:
    print raw_input('> ')

或者,您可以编写自己的完成版本并将相应的键绑定到它.此版本使用缓存,以防您的匹配列表很大:

#!/usr/bin/env python

import readline

values = ['Paul Eden <paul@domain.com>','Somebody Else <somebody@domain.com>']
completions = {}

def completer(text,state):
    try:
        matches = completions[text]
    except KeyError:
        matches = [value for value in values
                   if text.upper() in value.upper()]
        completions[text] = matches
    try:
        return matches[state]
    except IndexError:
        return None

readline.set_completer(completer)
readline.parse_and_bind('tab: menu-complete')

while 1:
    a = raw_input('> ')
    print 'said:',a

总结

以上是编程之家为你收集整理的如何执行python命令行自动完成,但不仅仅是在字符串的开头全部内容,希望文章能够帮你解决如何执行python命令行自动完成,但不仅仅是在字符串的开头所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶