我尝试获得一种启用了自动完成功能的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(">"))
感谢您的帮助。