Autocomplete 如何将readline与自动完成和自定义输出流一起使用?

Autocomplete 如何将readline与自动完成和自定义输出流一起使用?,autocomplete,readline,python-2.x,Autocomplete,Readline,Python 2.x,我试图获得一种启用了自动完成功能并自动更新打印文本的shell 我的第一个想法是将标准输出封装到自定义对象中,并将每个属性访问重定向到原始标准输出对象。 只有write函数被重写以管理文本更新。 但一旦标准输出被对象包装器替换,自动完成就停止工作 下面是一个简单的示例,尝试添加一个空格前缀,它不适用于python2,但如果用输入替换原始输入,它适用于python3 import readline import sys class writer(object) : def write(s

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

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

下面是一个简单的示例,尝试添加一个空格前缀,它不适用于python2,但如果用输入替换原始输入,它适用于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(">"))
谢谢你的帮助