2011-12-20 140 views
0

我有一個noob問題。如何從shell運行python腳本

我有一個Python腳本路徑1 /路徑/ file.py

,腳本的功能:

def run (datetime = None): 

在shell我打電話

import path1.path2.file 
import datetime 
path1.path2.file.run(datetime = datetime(2011,12,1)) 

但我正在逐漸 TypeError:'模塊'對象不可調用

最新的正確方法調用shell中的方法?

回答

4

這個問題實際上是日期時間模塊中。 您正試圖調用模塊本身。 你想調用的函數本身就叫做datetime。 所以你要調用的是:

datetime.datetime() 

或者您可以用導入功能:

from datetime import datetime 

,然後用調用它:

datetime() 
1

你可以寫:

import path1 
path1.path2.file.run(...) 

或者:

from path1.path2.file import run 
run(...) 

不要忘記,你需要一個__init__.py文件中的每個目錄(路徑1和路徑2),使該目錄作爲一個模塊(然後,允許它是可導入的。)。如果您沒有任何內容,該文件可能只是空的。

+0

第二個同樣的錯誤 – SuperString 2011-12-20 15:11:05

+1

第一個得到AttributeError:'module'對象沒有屬性'path2' – SuperString 2011-12-20 15:11:16

+1

你在'path1'目錄和'path2'目錄有'__init __。py'文件嗎? – tito 2011-12-20 15:15:11

0

嘗試以下操作:

from path1.path2.file import run 
+0

同樣的錯誤TypeError:'module'對象不可調用 – SuperString 2011-12-20 15:09:25

-1

可以導入的文件夾做

import path1 

,然後調用簡單的腳本做:

path1.path2.file.run(...) 

otherwhise,如果你不希望包括目錄中的所有其他的東西,你可以用

from path1.path2.file import run 

在這種情況下,你只需要調用嘗試:

run() 

乾杯,

+0

做「import some_package」不會導入它的所有子包/子模塊。 – yak 2011-12-20 15:42:39

0

如果沒有這些工作,這裏是一個(鋰這樣做的ttle有點髒)的方式:

# Python <= 2.7 

namespace = {} 
exec open("path1/path2/file.py").read() in namespace 
namespace["run"](datetime=datetime.datetime(2011,12,1)) 

# Python >= 3.0 

namespace = {} 
exec(open("path1/path2/file.py").read(), namespace) 
namespace["run"](datetime=datetime.datetime(2011,12,1)) 

當然,你可以省略namespace = {}in namespace/, namespace部分,但隨後,在file.py代碼實際上可能更改其他變量在你的shell中。