【问题标题】:Python: modify builtin print functionalityPython:修改内置打印功能
【发布时间】:2023-03-22 18:03:02
【问题描述】:

我想在 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 键缓冲。我该如何解决这个问题?

【问题讨论】:

  • 你从来没有向我们展示过打印代码,所以我们不知道错误是什么。
  • 抱歉错过了..相应地编辑了代码..
  • 我认为正在发生的事情是 print 隐式添加了换行符。这个额外的打印也调用了你的重定向写入函数,所以你得到另一个“###\n”

标签: python python-2.7 stdout jython stdin


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    这有点hacky,但试试这个:

    ...

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

    ...

    【讨论】:

    • 非常感谢伙计们。我试图从缓冲区中删除 '\n' 。无论如何这有效..
    • 当有两个打印语句时,这将失败。我们也必须处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多