2016-04-13 12 views
2

Ich versuche, mehrere Funktionen aus separaten Dateien mit den gleichen Namen zu validieren.Aufruf einer Funktion aus mehreren Skripten in Python

So halte ich ein Verzeichnis von Verzeichnissen haben: dir1 die s1, s2, s3, ..., sn hat, die alle Verzeichnisse sind und jeweils eine Datei mit dem Namen submission.py. Ich weiß nicht, was S1 bis zur Laufzeit sind.

In jedem submission.py gibt es Funktionen f1 bis fm.

Ich möchte ein Skript erstellen, das f1 bis fm ausführt und ihre Ausgabe für jeden s1 durch sn submission.py-Datei druckt.

Ich würde gerne denken, dass ich jede Datei submission.py in jedem Verzeichnis importieren konnte, aber das Problem ist, dass jede Datei den gleichen Namen hat. Außerdem sind s1 bis sn bis zur Laufzeit nicht bekannt. Offensichtlich kann ich s1 durch sn mit der Funktion os.listdir bestimmen.

Irgendeine Idee, wie ich f1 aus zwei verschiedenen Dateien aufrufen kann, nachdem ich die Namen der Verzeichnisse durch os.listdir bekommen habe?

+0

Unterverzeichnisse s1 Do, s2, s3 usw. enthalten jeweils '__init__.py 'Dateien? – wim

+0

Nein. Die Unterverzeichnisse sind in der Regel Student Submission Verzeichnisse und sie reichen nur einfache Skripte. – mattsap

Antwort

2

Dies ist möglich mit 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'>} 

Dann eine Funktion f3 im submission.py Modul im Unterverzeichnis s2 beispielsweise enthalten sind, zu nennen, wäre es:

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

Diese Lösung ist schön. – mattsap

Verwandte Themen