为什么替换sys.stdout会破坏< pdb'中的读取线设施?或者' ipython'?

时间:2015-02-03 06:13:08

标签: python-2.7 ipython stdout pdb

我想保护自己免受编码错误的影响。许多解决方案将涉及替换sys.stdout,但这会阻止箭头键的识别,并阻止对当前行的良好编辑或调用pdbipython中的过去命令。 Ctrl-R也被打破了。删除有效。由于某些原因,似乎读取设施都已消失或未被触发。

这是一个简单的例子,应该是无害的,因为它只是将输入传递给旧的sys.stdout而无需改变:

cat <<EOF > /tmp/example.py

import sys

from codecs import StreamWriter

class TestWriter(StreamWriter):
    def write(self, obj):
        return self.stream.write(obj)

import pdb; pdb.set_trace()  ## before replacing stdout, all works
sys.stdout = TestWriter(sys.stdout)  ## Type 'n' in pdb
pass                         ## 'pdb' shell is screwed up.
EOF
python /tmp/example.py

然而,这也失败了。由于某些原因,这不会发生在python3中,而只发生在python2.7上。

幕后会发生什么?为什么这会失败?这可以避免吗?

0 个答案:

没有答案