0

我想自定义printPython 中的语句以获取其他文本。但是用我的方法,似乎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密钥缓冲。我该如何解决这个问题?

4

2 回答 2

2

print根据默认值(或每个参数之间的空格)将换行符写入输出流。所以你会接到两个电话write,一个是 with "abc",一个是 with "\n"

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

于 2012-05-13T13:11:53.457 回答
1

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

这有点hacky,但试试这个:

...

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

...

于 2012-05-13T13:20:33.953 回答