当前位置: 首页 > 面试题库 >

如何执行python命令行自动补全,但不仅限于字符串的开头

孔飞舟
2023-03-14
问题内容

Python中,通过它的readline的绑定提供了较大的命令行自动完成。

但是,补全似乎只在字符串的开头起作用。如果要匹配字符串的中间或结尾,则行不起作用。

我想在命令行python程序中通过将我键入的内容与可用字符串列表中的任何字符串进行匹配来自动完成字符串。

  • 我想拥有的自动补全类型的一个很好的例子是,在“收件人”字段中键入时,GMail中发生的类型。如果您输入联系人的姓氏,它的出现和您输入她的姓氏一样。
  • 可能需要使用向上和向下箭头或其他方法从匹配的字符串中进行选择(在readline的情况下则不需要),这对我而言很好。
  • 我的特殊用例是一个发送电子邮件的命令行程序。
  • 特定的代码示例将非常有帮助。

使用像curses这样的终端仿真器就可以了。它仅需在linux上运行,而无需在Mac或Windows上运行。

这是一个示例:说我在列表中有以下三个字符串

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

我想要一些代码,在键入“ Eden”后,将自动完成列表中的前两项,然后让我选择其中一项(全部通过键盘使用命令行)。


问题答案:

我不确定我是否理解问题。您可以使用readline.clear_history和readline.add_history设置所需的可完成字符串,然后使用control-r搜索历史记录中的backword(就像在shell提示符下一样)。例如:

#!/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>', 
          'Eden Jones <ejones@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 命令行也可以自动补全的使用技巧和注意事项,需要的朋友参考一下 许多人都知道 iPython 有很好的自动补全能力,但是就未必知道 python 也同样可以 Tab 键补全, 您可以在启动 python 后,执行下 这就可以按 Tab 键补全了。 python 自启动 如果您嫌每次都要键入这东西麻烦的话,可以把上边这行写到

  • 问题内容: 我想知道是否有一种方法可以像使用bash的.bash_profile或.profile脚本那样在进入python shell时自动运行命令。我想自动导入一些模块,这样我每次跳入shell时都不必键入整个shebang。 谢谢, 问题答案: 是的,你可以使用环境变量来做到这一点所概述这里

  • 问题内容: 我正在写以下命令 我怎样才能将此命令限制为仅管理员?我试着看,它说。我如何检查给定的用户是否是? 问题答案: 有两种方法:通过使用的角色白名单 或经许可使用 这两个装饰器都是Checks,如果它们失败,将引发您的一些子类供您选择处理。

  • 本文向大家介绍Python 自动补全(vim),包括了Python 自动补全(vim)的使用技巧和注意事项,需要的朋友参考一下 一、vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.python 模块内函数,变量补全 5.from module impor

  • 我不确定我错过了什么。我的自定义逻辑适用于我为目标指定的所有字符串属性,而不仅仅是一个。 图像映射器: 购物产品映射器: 生成的mapstruct类: 为什么描述字段也与toFullImagePath一起使用? 这个“@Mapping(target=“fullImagePath”,source=“thumbPath”)不应该指定我只想更改fullImagePath吗?

  • 问题内容: 我有一种情况想要在Python中执行以下shell命令并获取输出, 我可以使用此python代码在python中执行上述shell命令, 但是,由于我 不想使用“ shell = True”选项 ,因此我尝试了以下python代码, 我想知道为什么我参考网页中的描述时输出为“ None”:http : //docs.python.org/library/subprocess.html#