首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从子函数生成自定义打印函数

从子函数生成自定义打印函数
EN

Stack Overflow用户
提问于 2018-03-26 19:35:22
回答 1查看 150关注 0票数 3

我自定义了打印函数,以便打印到控制台,并将打印行发送到对象,这样我就可以使用产率函数将它们输送到gui。这很好,直到我的函数调用一个子函数,然后该子函数打印到控制台。如果我将我的自定义打印导入到该子函数中,它将无法工作,因为该打印将生成子函数的结果,而不是原始的外部函数。

有没有一种方法可以让我的自定义打印直接返回到主函数,并跳过这个临时的噩梦?

代码语言:javascript
复制
from __future__ import print_function
import __builtin__

def print(*args, **kwargs):
    import builtins
    import io
    from contextlib import redirect_stdout
    builtins.print(*args, **kwargs)
    with io.StringIO() as buf, redirect_stdout(buf):
        builtins.print(*args, **kwargs)
        output = buf.getvalue()
    return output
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-26 20:48:31

与其重写print,不如创建一个在写入两个不同文件时写入它的对象。有点像

代码语言:javascript
复制
# I'm not sure if there are other methods you should override, but
# they would be similar.
class Delegator(io.TextIOBase):
    def __init__(self, fh1, fh2):
        self.fh1 = fh1
        self.fh2 = fh2

    def write(self, txt):
        self.fh1.write(txt)
        self.fh2.write(txt)

    def flush(self):
        self.fh1.flush()
        self.fh2.flush()

sys.stdout = Delegator(sys.stdout, my_other_file)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49499282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档