2012-08-05 197 views
-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" 
+1

爲什麼有新的問題? http://stackoverflow.com/questions/11814565/python-trouble-with-calling-functions-from-a-module – phant0m 2012-08-05 08:54:47

+0

,因爲我沒有得到明確的答案,將工作,並在那個時候,我認爲這是由於我在另一篇文章中沒有明確說明我的問題。 – bs7280 2012-08-06 06:39:15

+1

@ user1270285:您可以編輯您以前的問題。 – 2012-08-06 06:47:14

回答

0

很簡單,這是我在空閒

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

得到了我的電子郵件,打開沒有!

2

As documented,使用__import__()用虛線名稱和沒有fromlist參數返回到最上面的包的引用。您可以使用點符號或getattr()來訪問相應的屬性以降低程序包層次結構。

+0

謝謝!經過getattr()的閒置後,我得到了它的工作! – bs7280 2012-08-06 06:36:21