我想在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 键进行缓冲。我该如何解决这个问题?
答案 0 :(得分:2)
print
每个默认值(或每个参数之间的空格)将换行符写入输出流。因此,您可以拨打write
两个电话,一个电话为"abc"
,另一个电话为"\n"
。
因此,如果您不想要这种行为,则必须单独处理这些调用。
答案 1 :(得分:1)
我认为正在发生的事情是print会隐式添加换行符。这个额外的打印也调用你的重定向写功能,所以你得到另一个“### \ n”
有点hacky,但试试这个:
...
def write(self, text):
if text!="\n":
self.stdout.write('###' + text)
...