如何执行python命令行自动完成,但不仅仅是在字符串的开头
Python,通过它的readline绑定允许很好的命令行自动完成(如 here中所述). 但是,完成似乎只在字符串的开头起作用.如果要匹配字符串的中间或结尾,则readline不起作用. 我想在命令行python程序中自动完成字符串,方法是将我输入的内容与可用字符串列表中的任何字符串进行匹配. >我想要的自动填充类型的一个很好的例子是当你输入To字段时在GMail中发生的类型.如果您输入其中一个联系人的姓氏,它就会像您输入她的名字一样出现. 使用像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搜索历史记录中的后向字符(就像您在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>','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 (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |