我在python中使用readline进行自动完成
如果我有,我正试着这样做:
names = ['ben dodds', 'james asda', 'izzy smidt']
当我有
时> Insert name:
> be TAB
ben dodds
> ben TAB
ben dodds, james asda, izzy smidt
最后一个是错误的,因为它应该只显示ben dodds
到目前为止,这是我的代码:
def completer(text, state):
options = [x for x in names if x.startswith(text)]
try:
return options[state]
except IndexError:
return None
readline.set_completer(completer)
if 'libedit' in readline.__doc__:
readline.parse_and_bind("bind ^I rl_complete")
else:
readline.parse_and_bind("tab: complete")
name = raw_input('Enter name\n')
print name
到目前为止,我已经收集了它与readline.set_completer_delims()
有关但我无法弄清楚如何让它工作,任何帮助都将不胜感激
我已经尝试了
readline.set_completer_delims('')
它没有用
答案 0 :(得分:2)
试试这个:
readline.set_completer_delims('')
我将该行添加到您的脚本中,如下所示:
import readline
names = ['ben dodds', 'james asda', 'izzy smidt']
def completer(text, state):
options = [x for x in names if x.startswith(text)]
try:
return options[state]
except IndexError:
return None
readline.set_completer(completer)
readline.set_completer_delims('')
if 'libedit' in readline.__doc__:
readline.parse_and_bind("bind ^I rl_complete")
else:
readline.parse_and_bind("tab: complete")
name = raw_input('Enter name\n')
print name
这解决了我的问题(在64位Ubuntu 12.04上使用python 2.7.3或2.7.6)。