Python 从父模块导入/执行模块和调用函数

Python 从父模块导入/执行模块和调用函数,python,django,python-2.7,Python,Django,Python 2.7,我正在尝试从django应用程序调用外部python脚本。我想在外部python脚本中从父模块调用一个函数。我尝试了以下方法 使用subprocess.call:在这种情况下,我无法使用父文件中的函数。目标函数使用Django模型执行一些db操作 导入外部文件:我尝试使用Import()导入外部文件,但无法访问父模块中定义的功能 示例代码: from app.models import x def save(): print x.objects.all() def do_st

我正在尝试从django应用程序调用外部python脚本。我想在外部python脚本中从父模块调用一个函数。我尝试了以下方法

  • 使用subprocess.call:在这种情况下,我无法使用父文件中的函数。目标函数使用Django模型执行一些db操作

  • 导入外部文件:我尝试使用Import()导入外部文件,但无法访问父模块中定义的功能

  • 示例代码:

    from app.models import x
    
    def save():
        print x.objects.all()    
    
    def do_stuff():
        subprocess.call('external_script')
    
    
    #----------External script --------
    ''' some code here '''
    
    #Calling save function from parent 
    save()
    

    如何实现这一点?

    模块不知道在哪里导入,具体来说,模块的全局文件在导入时是新创建的。因此,如果导入器不合作,则导入的模块永远不会触及位于导入器命名空间中的对象。如果模块需要调用父级命名空间中的函数,则其父级必须将该函数传递给该模块。具体地说:

    #child
    def do_stuff(parents_function):
        pass
    

    但是,由于缓存的原因,模块并不是完全隔离的。因此,如果您知道父模块的名称,可以执行以下操作:

    #child
    import parent
    def do_stuff():
        parent.func()
    


    如果您有权编辑该外部模块,并且您正在从该模块调用某个函数,而不仅仅是导入该函数,则可以从第一个模块传递回调:

    def save():
        pass # do something here
    
    def execute_external_module():
    
        from external_module import some_function
        some_function(save)
    


    “从父模块调用函数”对您意味着什么?脚本中是否导入了某些模块?或者它是一个子模块,您正试图访问包含该子模块的模块?您是说您在app.models中有一个save方法,并且您正试图调用它吗?@GwynBleidD在给定代码中,我正在从第一个程序调用外部脚本,该外部脚本需要访问第一个程序中定义的函数-save()在这方面的作用case@idjaw不,save方法使用的是内部的一个django模型
    #parent
    import child
    def func():
        pass
    child.do_stuff()
    
    def save():
        pass # do something here
    
    def execute_external_module():
    
        from external_module import some_function
        some_function(save)
    
    def some_function(callback=None):
        # do something here
    
        if callback is not None:
            callback()