猴子补丁一般是用于修改三方包或官方包,也可以用来修改自己或者他人的代码。

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

但也可以用来修改python 语言内置的关键字。

 

本篇博客修改python最常用的内置print,使你使用print时候,自动打印出当前打印处的文件名和行号,并使用特殊的自创模板,使其在pycharm控制台中能够点击自动跳转到打印处。

 

 

# -*- coding: utf-8 -*-
# @Author  : ydf
import sys


# noinspection PyProtectedMember
def nb_print(x):
    """
    超流弊的print补丁
    :param x:
    :return:
    """
    # 获取被调用函数在被调用时所处代码行数
    line = sys._getframe().f_back.f_lineno
    # 获取被调用函数所在模块文件名
    file_name = sys._getframe(1).f_code.co_filename
    # sys.stdout.write(f'"{__file__}:{sys._getframe().f_lineno}"    {x}\n')
    sys.stdout.write(f'"{file_name}:{line}"    \033[0;93m{x}\033[0m\n')                    # 36  93 96


# noinspection PyShadowingBuiltins
print = nb_print
if __name__ == '__main__':
    nb_print(123)
    print(456)

 

如果在其他文件使用print猴子补丁,保存以上代码到文件monkey_print.py中。

 然后用法是from monkey_print import *

 

这样你写 print(789)   的效果就自动是下图中这样了,自动有了显示前缀。

如何?你可以点击这个文件名链接自动跳转到打印代码发生处。 颜色可以自己用白色或者不要随便改。

 

 超牛 猴子补丁,修改python内置的print 随笔

 

 

主要作用是如果项目人员中写得很low没有使用日志,而是疯狂大量print,但整个项目运行起来。套了很多层,不知道是哪里print的,使用此猴子补丁,可以一次性改变项目中所有print的行为,利于找到print是在哪里产生的。

如果是新项目,最好用日志而不是print。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄