2011-12-20 63 views
0

私は質問があります。シェルからPythonスクリプトを実行する方法

私は、スクリプトが機能を持っているPythonスクリプトのpath1/path2を/ file.py

を得た:私は

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

呼び出すシェルで

def run (datetime = None): 

が、私は を取得していますTypeError: 'module'オブジェクトは呼び出し可能ではありません

シェルのメソッドを呼び出しますか?

答えて

4

問題はdatetimeモジュールに実際にあります。 モジュール自体を呼び出そうとしています。 呼び出す関数は、それ自体がdatetimeと呼ばれます。

datetime.datetime() 

か、との機能をインポートできます: はそうあなたが呼び出したいものです、あなたがやってフォルダをインポートすることができ

datetime() 
1

あなたが書くことができます。

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

または:

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

は(あなたがモジュールとしてディレクトリを作成し、各ディレクトリ(パス1とパス2)で__init__.pyファイルが必要であることを忘れてはいけませんのそれをインポート可能にしてください)。このファイルは、何も置く必要がなければ空にすることができます。

+0

はAttributeErrorを取得秒1と同じエラー – SuperString

+1

最初の1:「モジュール」オブジェクトが属性「パス2」 – SuperString

+1

を持っていないあなたは 'path1'ディレクトリと' path2'ディレクトリで '__init __ py'ファイルを持っていますか? – tito

0

は、以下のことを試してみてください。

from path1.path2.file import run 
+0

同じエラーTypeError: 'module'オブジェクトは呼び出し可能ではありません – SuperString

-1

from datetime import datetime 

し、その後でそれを呼び出します

import path1 

その後、やっ単にスクリプトを呼び出す:あなたは、ディレクトリ内の他のすべてのものを含めたくない場合は、あなただけ呼び出す必要があり、この場合に

from path1.path2.file import run 

で試すことができます

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

otherwhiseを:

run() 

乾杯、

+0

「import some_package」を実行すると、そこからすべてのサブパッケージ/サブモジュールがインポートされません。 – yak

0

これらの作品のどれもが、ここで(Liがされていない場合もちろん

# 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のコードは、実際に他の変数を変更する場合があります。それを行う方法)ttle少し汚れあなたのシェルで。

関連する問題