Python中,通过它的readline的绑定提供了较大的命令行自动完成。
但是,补全似乎只在字符串的开头起作用。如果要匹配字符串的中间或结尾,则行不起作用。
我想在命令行python程序中通过将我键入的内容与可用字符串列表中的任何字符串进行匹配来自动完成字符串。
使用像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