Python 在pywb中重写函数而不更改代码源

Python 在pywb中重写函数而不更改代码源,python,python-3.x,Python,Python 3.x,我是python开发的新手,我正在使用PYWB库重放web归档文件和warc文件 我想修改pywb/warcserver/index中的函数,但不修改代码源 其思想是在保留原始代码源的同时修改一些特性。在不丢失更改的情况下更新代码源代码将非常有用 在pywb和python中如何实现这一点 要在indexsource.py文件中重写的函数是load_index 感谢load_index是FileIndexSource类的一种方法。您可以在实例级别修改该方法,而无需更改库的源代码。例如: from

我是python开发的新手,我正在使用PYWB库重放web归档文件和warc文件

我想修改pywb/warcserver/index中的函数,但不修改代码源

其思想是在保留原始代码源的同时修改一些特性。在不丢失更改的情况下更新代码源代码将非常有用

在pywb和python中如何实现这一点

要在indexsource.py文件中重写的函数是load_index

感谢

load_index是FileIndexSource类的一种方法。您可以在实例级别修改该方法,而无需更改库的源代码。例如:

from pywb.utils.binsearch import iter_range
from pywb.utils.wbexception import NotFoundException
from pywb.warcserver.index.cdxobject import CDXObject
from pywb.utils.format import res_template

def modified_load_index(self, params):

    filename = res_template(self.filename_template, params)

    try:
        fh = open(filename, 'rb')
    except IOError:
        raise NotFoundException(filename)

    def do_load(fh):
        with fh:
            gen = iter_range(fh, params['key'], params['end_key'])
            for line in gen:
                yield CDXObject(line)

    # (... some modification on this method)
    return do_load(fh)

# Change the "load_index" method on the instance of FileIndexSource
my_file_index_source.load_index = modified_load_index
从那时起,每次对我的\u文件\u索引\u源调用load\u index方法时,都将运行修改后的方法


另一个选项是创建一个新类,该类继承自FileIndexSource并覆盖load_index方法

感谢回复,此脚本将位于wich文件?的哪个文件夹中,以及如何在原始函数之前调用它?我如何告诉pywb调用我的文件索引源而不是文件索引源?感谢您将其作为wayback[…]运行?不@Jundiaius,我将其与uwsgi uwsgi.ini对齐uwsgi.ini文件位于github上,它包含wsgi=pywb.apps.wayback