Python:修改内置打印功能

时间:2012-05-13 12:46:46

标签: python python-2.7 stdout jython stdin

我想在Python中自定义print语句以获取其他文本。但是根据我的方法,似乎 Enter 键在输入中被缓冲。

我使用的程序是:

class rename_print:
    def __init__(self, stdout):
        self.stdout = stdout     
    def write(self, text):
        self.stdout.write('###' + text)     
        self.stdout.flush()
    def close(self):
        self.stdout.close()

import sys

prints = rename_print(sys.stdout)
sys.stdout = prints
print 'abc'

我得到的输出是

  

### ### ABC

我预期的输出是

  

### ABC

这可能是什么原因?我怀疑输入流是否使用 Enter 键进行缓冲。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

print每个默认值(或每个参数之间的空格)将换行符写入输出流。因此,您可以拨打write两个电话,一个电话为"abc",另一个电话为"\n"

因此,如果您不想要这种行为,则必须单独处理这些调用。

答案 1 :(得分:1)

我认为正在发生的事情是print会隐式添加换行符。这个额外的打印也调用你的重定向写功能,所以你得到另一个“### \ n”

有点hacky,但试试这个:

...

def write(self, text):
    if text!="\n":
       self.stdout.write('###' + text)

...