• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

覆盖REPL输出

python 来源:Turtles Are Cute 5次浏览

我正在寻找一种方法来覆盖和解析Python REPL中的所有输出:例如,终端中的python/IPython,qtconsole。覆盖REPL输出

通过重写打印功能,可以直接打印文本。对于一个简单的例子,假设我们想感叹号添加到所有输出:

orig_print = print 
print = lambda text: orig_print(text + '!') 

现在所有打印命令将有加感叹号。这可以重置为:

del print 

我的问题:如何做REPL输出的等价物?例如,我怎样才能做到这一点?

In[1]: 5 + 5 
Out[2]: 10! 

搜索导致我失望contextlib,子和sys.stdout的路径,但我还没有找到一个解决方案。在Github上检查过sympy的打印模块,但没有成功。


===========解决方案如下:

我只是试图覆盖sys.stdout.write它工作(有一些怪癖)。有人会纠正我,如果我错了,但我认为它不会比这更好。

In [1]: import sys 

In [2]: tmp = sys.stdout.write 

In [3]: sys.stdout.write = lambda text: tmp(text + '!') 

In [4]: 5 + 5 
!Out[4]: 10! 
!! 
!!In [5]: 

编辑:
我远远得到这一点。还没有想出那1个额外的!来自哪里。

In [5]: sys.stdout.write = lambda text: tmp(text if text.endswith('\n') else text + '!\r') 

In [6]: 5+5 
Out[6]: 10! 
! 
In [7]: 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)