2016-04-13 32 views
2

私は同じ名前の別々のファイルから複数の関数を検証しようとしています。Pythonの複数のスクリプトからの関数を呼び出す

だから、私はディレクトリのディレクトリを持って考えてみます。 S1、S2、S3、...、SNがすべてのディレクトリであり、それぞれがsubmission.pyというファイルが含まれてい DIR1 。実行時までs1からs1までのものは何か分かりません。

各submission.pyには、関数f1〜fmがあります。

f1からfmを実行し、各s1の出力をsnのsubmission.pyファイルから出力するスクリプトを作成したいとします。

私は各submission.pyファイルを各ディレクトリにインポートできると思っていますが、問題は各ファイルが同じ名前であることです。また、s1〜snは実行時まで分かりません。明らかに、私はos.listdir関数を使ってs1〜snを決定することができます。

os.listdirでディレクトリの名前を取得した後、どのように2つの異なるファイルからf1を呼び出すことができますか?

+0

はS1、S2、S3など各 '__init__.pyが含まれているサブディレクトリを行います'ファイル? – wim

+0

いいえ。サブディレクトリは実際にイントロの学生提出ディレクトリであり、単純なスクリプトを送信しています。 – mattsap

答えて

2

impを使用すると可能です。

>>> import os, imp 
>>> dirs = os.listdir('.') 
>>> dirs 
['s1', 's2'] 
>>> modules = {d: imp.load_source(d, d + '/submission.py') for d in dirs} 
>>> modules 
{'s1': <module 's1' from 's1/submission.py'>, 
's2': <module 's2' from 's2/submission.py'>} 

そして、例えばサブディレクトリs2に含まれるsubmission.pyモジュール内の関数f3を呼び出すために、それは次のようになります。

modules['s2'].f3() 
+0

このソリューションは美しいです。 – mattsap

関連する問題