Python print()重定向 不输出到屏幕

有这样一个需求:

如果一个函数handle_data()其内部有调用print()直接输出数据到屏幕,但是在某次调用handle_data()时又希望其不输出到屏幕,可以使用装饰器来进行处理。

具体实现代码如下:

import os
import sys

def print_redict_wrapper(input_func):
    def wrapper(data):
        with open('temp.dat', 'w') as dest_file:
            old_out = sys.stdout  # 保存之前的输出位置
            sys.stdout = dest_file  # 设置当前输出到文件
            input_func(data)
            sys.stdout = old_out  # 花园之前的输出位置

    return wrapper

# 这里不使用@ print_redict_wrapper
# 是希望直接调用handle_data()时还是输出到屏幕
def handle_data(data):
    print(data)

if __name__ == '__main__':
    handle_data('hellohi before')
    # 下面调用handle_data希望不输出到屏幕
    # 使用print_redict_wrapper进行包装
    wrapper_func = print_redict_wrapper(handle_data)
    wrapper_func('hellohi')
    handle_data('hellohi after')

代码输出为:

hellohi before
hellohi after

生成的临时文件temp.dat也可以将其删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值