Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

Python readline module

$
0
0

GNU readline 库提供了一些函数供程序调用,来允许用户修改他们键入的命令。通过这个库可以达到以下目的

1) <TAB> 补全

2) ↑ 或 ↓ 浏览历史命令

...

python 的 readline 模块 对这个库进行了一层封装

通过文档可以得知其基本用法,下面举几个小例子

补全 import time import readline class Command(object): command_list = ['time'] @staticmethod def exec_command(command): if command in Command.command_list: return getattr(Command, command)() return 'Command Not Found' @staticmethod def time(): return time.ctime() class SimpleCompleter(object): def __init__(self, complete_list): self.complete_list = complete_list def complete(self, text, state): response = None text = text.lower() if state == 0: if text: self.matches = [ s for s in self.complete_list if s.startswith(text)] else: self.matches = self.complete_list try: response = self.matches[state] except IndexError: pass return response readline.set_completer(SimpleCompleter(Command.command_list).complete) readline.parse_and_bind('tab: complete') if __name__ == '__main__': line = '' while line != 'stop': line = input('>>') result = Command.exec_command(line) print(result)

一个更好的示例便是 Python 的 rlcompleter 模块源代码

历史命令 import atexit import readline histfile = '/tmp/.test_history' try: readline.read_history_file(histfile) # default history len is -1 (infinite), which may grow unruly readline.set_history_length(1000) except FileNotFoundError: pass atexit.register(readline.write_history_file, histfile) if __name__ == '__main__': line = '' while line != 'exit': line = input('>>') Reference

readline ― GNU readline interface GNU Readline Library Python readline.set_completer Examples


Viewing all articles
Browse latest Browse all 9596

Trending Articles