Python 从父模块导入/执行模块和调用函数
我正在尝试从django应用程序调用外部python脚本。我想在外部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
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()