如何使用自动完成和自定义输出流的readline?

时间:2014-09-07 17:57:30

标签: autocomplete readline python-2.x

我尝试获得一种启用了自动完成功能的shell,并在打印的文本上自动更新。

我的第一个想法是将标准输出封装到自定义对象中,并将每个属性访问重定向到原始标准输出对象。 仅覆盖写入功能以管理文本更新。 但是一旦标准输出被对象包装器替换,自动完成就会停止工作。

这是一个尝试添加一个空格前缀的简单示例,它不适用于python2,但如果raw_input被输入替换,它可以与python3一起使用。

import readline
import sys

class writer(object) :
    def write(self, text):
        sys.__stdout__.write(" "+text)

    def __getattribute__(self, name):
        if name == "write":
            return object.__getattribute__(self,name)

        return sys.__stdout__.__getattribute__(name)

def complete(suffix,index):
    return [suffix+"a", suffix+"b", None][index]

if 'libedit' in readline.__doc__:
    import rlcompleter
    readline.parse_and_bind ("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")

readline.set_completer(complete)
sys.stdout = writer()

while True:
    print(raw_input(">"))

感谢您的帮助。

0 个答案:

没有答案