-1

我导入了一个模块,如下所示:

filename = "email"
mymodule = __import__('actions.'+filename)

我遇到的问题是,文件正在立即执行,我更愿意从文件中执行一个特定的函数(这样我就可以通过它发送变量)。

目前,当我添加下面的行(导入脚本时)时,我不会立即关心脚本是否执行,因为我会使用这个if __name__ == "__main__"技巧来解决它。

mymodule = __import__('actions.'+filename)

但我想要工作的是当我添加下面的行时,我希望执行该函数。但相反,我收到一个错误,即模块没有该功能,即使它存在于脚本中。

mymodule.OpenEmail(n)

函数名并不重要,因为当我运行它时,我已经能够让下面的脚本自行工作,但是当我尝试在空闲时导入它并执行上面的行时,我收到一个错误,说模块没有具有该功能(或一些非常相似的错误)。无论如何,下面的代码是我像插件一样使用的示例脚本。但我的主要观点是我能够在 python 中动态导入和执行脚本,但现在我希望能够将变量发送到文件中。如果我能以某种方式让函数像上面那样工作,我相信它会解决我的问题。

import webbrowser
def OpenEmail():
    handle = webbrowser.get()
    handle.open('http://gmail.google.com')
OpenEmail()
print "Your email has been opened"
4

2 回答 2

2

如文档所述,使用__import__()带点的名称且不带fromlist参数会返回对最顶层包的引用。您可以使用点表示法或使用getattr().

于 2012-08-05T08:38:07.137 回答
0

很简单,这就是我在 IDLE 中所做的

filename = 'actions.email'
mod = __import__(filename)
VAR = getattr(mod, 'email')
VAR.OpenEmail()

让我的电子邮件打开!

于 2012-08-06T06:49:25.363 回答