如果sys.stdout被重定向

你好,
我想在我的程序中完成互动输入的选项卡.
使用readline和rlCompleter这效果很好.但是我也必须
捕获并修改所有"打印"输出,因此我重定向sys.stdout
到自定义文件状对象.问题是:重定向后,
阅读线支持似乎突然被禁用.为什么?
这是一个例子:
- 切 - -
导入系统
导入RLCOMPLETER
导入阅读线
dottedWriter(对象):
"""只是Sys.Stdout包装器的一个简单示例"
def __init __(self,orig_stdout):
self.orig_stdout = orig_stdout
def写(自我,文本):
self.orig_stdout.write("." +文本)
readline.parse_and_bind("选项卡:完成")
mywriter = dottedWriter(sys.stdout)
RAW_INPUT("按下选项卡以查看完成工作.然后按Enter:")
打印"用自定义文件状对象替换sys.stdout ..."
sys.stdout = mywriter
RAW_INPUT("现在选项卡完整不再起作用.请尝试:")
- 切 - -
在第一个raw_input()调用中,选项卡完成作品,在第二个IT中
不.我在这里做错了什么还是一个错误?
在Windows(带Pyreadline 1.5)和Linux(标准读取线上)重现
模块),均使用Python 2.5.1.
我尝试过没有成功的事情:
- 使用__getAttr __模拟SYS.Stdout的所有其他方法
def __getAttr __(self,name):返回getAttr(self.orig_stdout,name)
- 使用其他形式的交互式输入
*导入代码; code.intract()
* 输入()
问候
dirk

# 回答1


德克损失写道:
Readline模块将其自动完成功能应用于(仅
到)sys.stdout.
问候,
比约恩
- -
BOFH借口#350:
范式移动...没有离合器
# 回答2


Bjoern Schliessmann写道:
我懂了.那我想我必须避免重定向sys.stdout和
而是提出某种解决方法.
尽管如此,感谢您的信息.
问候
dirk
# 回答3


德克损失写道:
我懂了.那我想我必须避免重定向sys.stdout和
而是提出某种解决方法.
只需使用"中央"功能打印输出即可.里面
功能,您可以在不希望的任何地方重定向输出
触摸sys.stdout.
问候,
比约恩
- -
bofh借口#226:
星球大战卫星意外地炸毁了Wan.

标签: python

添加新评论