补丁函数在运行时,简单的方法。

monki的Python项目详细描述


蒙基

补丁函数在运行时,简单的方法。

安装

pip install monki

基本用法

我们要修补以下功能:

def func():
    print('First')   # line 0
    print('Second')  # line 1
    print('Third')   # line 2

不同的修补方法:

import monki

# Add code at beginning or end

monki.patch(func, start="print('Starting')", end="print('Ending')")
func()
    >>> 'Starting'
    >>> 'First'
    >>> 'Second'
    >>> 'Third'
    >>> 'Ending'

# Insert lines at any offset

monki.patch(func, insert_lines={1: "print('Injected line')", 2: "print('Another injection')"})
func()
    >>> 'First'
    >>> 'Injected line'
    >>> 'Second'
    >>> 'Another injection'
    >>> 'Third'

# Let's patch a loop inside the function!
# To do so we need to insert the loop and indent a line to go inside it.

monki.patch(func, insert_lines={1: "for i in range(3):"}, indent_lines=[1])
func()
    >>> 'First'
    >>> 'Second'
    >>> 'Second'
    >>> 'Second'
    >>> 'Third'

限制

  • 目前,您无法对同一功能进行两次修补
  • 有些边案例不能与闭包函数一起使用
  • 可能只适用于cpython 3+。目前仅在CPython 3.7上测试

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java出现编译错误,我不理解   java在gnu-trove库中是否有任何有序映射?   java Servlet应该有映射,但找不到Servlet   java时间和第二期显示1:10,而不是13:10   java Play Framework 1.2.7 Heroku更新崩溃   线程“main”java中的opencsv异常。lang.NoClassDefFoundError:org/apache/commons/lang3/ObjectUtils   selenium在java中隐藏警告消息   java使用ID引用将JSON实体反序列化为POJO   java无法在JRE 8中加载字体   一个线程中的异常/错误会使整个应用程序停止吗?   java访问重复子规则的元素标签;e、 g.用ANTLR解析(1,2,3)中的a   java如何从平移旋转中找到新坐标   使用HTML Java小程序托管jar文件存在安全问题   java如何按频率而不是字母顺序排列字符串数组   java清除bufferedReader和块以获得更多输入   java解密SAML2断言