avatar

Python-raw_input实现tab补全

Python-raw_input实现tab补全

如果一个raw_input的功能加上了tab补全功能的话,整体的便捷性会提高很多。所以我特地查了很多资料,最后发现一下代码可以使用我们的需求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import readline
CMD = ['foo1', 'foo2', 'bar1', 'bar2', 'exit']
def completer(text, state):
options = [cmd for cmd in CMD if cmd.startswith(text)]
if state < len(options):
return options[state]
else:
return None

readline.parse_and_bind("tab: complete")
readline.set_completer(completer)

while True:
cmd = raw_input('==> ')
if cmd=='exit':
break
print(cmd)

首先我们需要查看一下readline模块的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# readline模块定义了以下方法:
readline.parse_and_bind(string): # 解析并执行命令行初始化文件。
readline.get_line_buffer(): # 返回当前命令行缓存的内容。
readline.insert_text(string): # 插入到当前行。
readline.read_init_file([filename]): # 解析一个命令行初始化文件。
readline.read_history_file([filename]): # 读取历史命令文件,默认为~/.history
readline.write_history_file([filename]): # 保存历史命令文件,默认为~/.history
readline.get_history_length(): # 获取预设的历史命令条数。负数意味着不限制条数大小。
readline.set_history_length(length): # 设置要保存到历史命令文件中的命令条数,write_history_file()使用这个数字对历史命令文件进行修改。
readline.get_current_history_length(): # 返回当前历史文件中历史命令的条数。
readline.get_history_item(index): # 获取index索引指定的历史命令。
readline.remove_history_item(pos): # 删除指定位置的历史命令。
readline.replace_history_item(pos, line) : # 使用给定命令替换指定位置的命令。
readline.redisplay() : # 根据命令行缓存实时更新当前屏幕的显示。
readline.set_startup_hook([function]) : # 设置或删除钩子函数,如果指定了函数,就将其设为钩子函数,\
                               如果没有指定或者设置为None,所有已经安装的钩子函数将被移除,钩子函数在命令行输出提示前执行。
readline.set_pre_input_hook([function]): # 跟set_startup_hook()方法类似,但是钩子函数是在提示输入完之后,命令行开始读取字符串之前执行。
readline.set_completer([function]): # 如果提供了函数,则用作自动完成命令函数,如果忽略或者设置为None,则移除之前设置的函数。 \
                            命令自动完成函数形式如function(text,state),text为命令行中输入的字符串,state为选择的的补全命令索引。
readline.get_completer(): # 返回自动完成命令函数。
readline.get_completion_type() : # 返回自动完成的类型。
readline.get_begidx() : # 获取命令行tab自动补全范围的第一个值的索引。
readline.get_endidx() : # 获取命令行tab自动补全范围的最后一个值的索引。
readline.set_completer_delims(string) : # 设置自动补全命令之间的分隔符。
readline.get_completer_delims() : # 获取分隔符。
readline.set_completion_display_matches_hook([function]) : # 设置或者移除自动完成显示函数。
readline.add_history(line) : # 添加最后一条输入的命令到历史文件中。
文章作者: 咲夜南梦
文章链接: http://yoursite.com/2020/02/14/Python-raw_input%E5%AE%9E%E7%8E%B0tab%E8%A1%A5%E5%85%A8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咲夜南梦's 博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论