Spezielle Attribute verwenden wie im_func, im_class

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gast

Dienstag 27. Dezember 2005, 09:58

Hallo zusammen!

Ich haben folgendes Problem: Ich wollte in Script einige zusätzlich Dateien aus dem gleichen Verzeichnis verwenden, aber ohne absolute Verzeichnisangabe. Wenn ich das Scirpt direkt aufrufen, gibt es kein Problem, da die anderen Dateien im gleichen Verzeichnis! Aber, wenn es aus einem Framework, dann sieht schrecklich aus:

Ich habe ad hoc so gemacht:
filename = inspect.getabsfile(eineMethodeAusEinerKlasse)
==> dann das entsprechende Verzeichnis herausfiltern und anschließend mit anderen Dateien zusammensetzen!

Zufällig habe ich gesehen, es gibt auch Attribute wie im_func, im_class, aber ich wisse nicht wie ich in meinen Code verwenden!

Bitte um Hilfe oder einen Hinweis

Boostpy
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 27. Dezember 2005, 10:19

Anonymous hat geschrieben:Bitte um Hilfe oder einen Hinweis
Hi!

Mit "__file__" bekommst du den Dateinamen des Modules. Wenn du das noch durch "os.abspath()" und "os.dirname()" jagst, dann hast du den Ordner des Moduls. Den Rest deines Beitrages müsste ich wohl öfter durchlesen um ihn zu verstehen. :)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Dienstag 27. Dezember 2005, 10:32

Hi gerold,

mit __file__ geht es bei mir leider nicht. Es ist nur den einzigen Methoden verfügbar, da mein Framework alle Methoden gesammelt (UnittestCases) hat. Oder habe ich falsch verstanden?

mfg

Boostpy
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 27. Dezember 2005, 15:27

Hier ein Snippet aus einem meiner Programme, das könnte dich weiterbringen:

Code: Alles auswählen

    def parser_dir(self):
        """Gets the path of the directory where the parsers can be found."""
        try:
            appdir = os.path.dirname(__file__)
            if '.zip' in appdir:
                # frozen exe
                appdir = os.path.dirname(sys.argv[0])
        except NameError:
            # frozen exe, so no __file__
            appdir = os.path.dirname(sys.argv[0])
        pdir = os.path.join(appdir, 'parsers')
        return pdir
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Dienstag 27. Dezember 2005, 19:37

Hi Leonidas,

danke für das Codesegment. Ich glaube, es hilft mir nicht weiter.

In den Moment, wann ich den Modulnamen brauche, wird nur der Name einer Methode noch verfügbar (sonst muss ich das Framework anpassen!). So brauche ich zu wissen, wie ich am einfachsten ermitteln kann, wo das entsprechende Modul herkommt?

Die Anweisung

Code: Alles auswählen

filename = inspect.getabsfile(eineMethodeAusEinerKlasse)
kann mir helfen, aber ich wollte wissen,

wie man im_func im_class verwenden kann?

Danke für die Hilfe!

Boostpy
Antworten