2009-07-20 14 views
2

私はPythonプログラムを実行する過程で、Pythonファイルを作成しています。私はこれらのファイルをインポートし、それらのファイル内で定義された関数を実行したいと思います。私が作成しているファイルは自分のパス変数には格納されていないので、そのまま使用したいと思います。動的に作成されたPythonファイルのインポート

元私はexecFile(<script_path>)関数を呼び出していて、そのファイルを実行して定義された関数を呼び出していました。これは、常に私が現在の設定で私は起こることはできません​​の条件を入力する副作用があります。

私はすでに100個のファイルを作成しており、それらをすべて修正する必要がないので、生成されたファイルを変更することはできません。私は、生成されたファイルを呼び出すファイルのみを変更できます。私は男に正しくご発言を理解していれば基本的に私が今持っているもの

...

#<c:\File.py> 
def func(word): 
    print word 

if __name__ == "__main__": 
    print "must only be called from command line" 
    #results in an error when called from CallingFunction.py 
    input = sys.argv[1] 

#<CallingFunction.py> 
#results in Main Condition being called 
execFile("c:\\File.py") 
func("hello world") 
+3

関連しないヒント:コード内のファイル名にバックスラッシュを使用しないでください。 "c:/file.py"と書く。それはWindowsで動作し、パスを解析するすべてのものに対してより一貫しています。 –

答えて

5

使用

m = __import__("File") 

は、これは、本質的に

import File 
m = File 
+0

実際には同じです。作成しているファイルが自分のパス変数内に格納されていないことを正しく読めば、そのように保つことを好むでしょうし、Halfcentの問題は解決しません。 –

+0

または、ただ役に立たない制約を無視してください。ファイルは、プロジェクトのルートパッケージ内の他のモジュールとは別に、サブパッケージに入れることができます。 – habnabit

3

をやってと同じであることファイルがsys.pathではなく、あなたはそれをそのままにしておくと、これはまだ動作します:

import imp 

fileobj, pathname, description = imp.find_module('thefile', 'c:/') 
moduleobj = imp.load_module('thefile', fileobj, pathname, description) 
fileobj.close() 

(もちろん、 'C:/thefile.py' が指定:とos.path.spliyと 'thefile.py'、および 'thefile.py' get「がthefileから '/ C'、あなたは部分を抽出することができます'with os.path.splitext

関連する問題