2016-11-24 1 views
0

Ich weiß schon, dass ein Python-Programm die Dateinamen bestimmen kann, der direkteste ich habe ist dieseKann ein Python-Modul seinen Dateinamen bestimmen, oder wofür wurde es importiert?

import sys 
name = sys.argv[0] 

Meine Frage gesehen der Code in einem importierten Modul kann die gleiche Art der Sache zu tun? Ich benutze Python 3.5.

Ich schreibe ein großes Programm, das, aus Gründen der Bequemlichkeit und Erweiterbarkeit, in einen Hauptteil und "Add-ons" aufgeteilt ist, ähnlich wie Audacity. Ich versuche es einfach zu machen, zu erweitern und DRY, wobei ein Add-on-Modul einfach zum Programmverzeichnis hinzugefügt wird, und das Hauptprogramm kann es aufnehmen und verwenden. Ich verwende einen Benennungsstandard, bei dem die Moduldateinamen ein programmspezifisches Präfix erhalten, um sie zu identifizieren, und dann einige Klassen mit Standardnamen und Daten darin implementieren.

Da das Hauptprogramm nicht die Namen des Add-ons vor der Zeit weiß, ich bin sie so zu importieren, die OK

def get_available_modules(self, prefix=""): 
    """ import the files named prefix_xxx.py in this folder """ 

    files = os.listdir(os.getcwd()) 
    self.modules = {} 

    for file_name in files: 
     # print('examining ', file_name) 
     if file_name.startswith(prefix): 
      # print('this one looks OK ', file_name) 
      # strip the .py off the end 
      mod_name = file_name[:-3] 
      # strip prefix off the front 
      mod_ID = mod_name[len(prefix):] 

      self.modules[mod_ID] = __import__(mod_name) 

    # print('loaded modules ') 
    # for name in self.modules: 
     # print(name) 

scheint zu funktionieren, die Module bekam zu haben, kann ich dann greifen Sie auf das zu, was sie tun, legen Sie ihre Beschreibungen in listBoxes oder Menüs, instanziieren und zeigen Sie ihre Kontrollfelder, und zeigen Sie sie auf die Ressourcen, die sie arbeiten müssen. Zum Debuggen der Eigenkonsistenz möchte ich jedoch, dass das Modul bestimmen kann, wie es heißt und wie sein Dateiname lautet. Ich werde neue Funktionen erstellen, indem ich vorherige bearbeite, und weiß, dass ich alles konsequent nicht ändern werde.

Offensichtlich wenn ich die Objekte fire, kann ich auch die mod_ID eingeben, aber das ist eher wie der Zauberer zu sehen, der den Hasen in den Hut setzt.

Gibt es einen Parameter in einem Modul, der seinen Dateinamen für sich zugänglich macht?

+0

habe es nicht selbst versucht, aber sieht so aus: __ loader __. Fullname siehe https://www.python.org/dev/peps/pep-0302/und http://stackoverflow.com/questions/5183601 –

+0

Mögliches Duplikat von [Python \ _ \ _ file \ _ \ _ Attribut absolut oder relativ?] (http://stackoverflow.com/questions/7116889/ python-file-attribute-absolute-or-relative) – user590028

+0

Ähm, dunder name dunder ____name____ funktioniert. Ich bin mir sicher, dass es möglich ist, es irgendwo in TFM zu rendern! ____loader____ scheint keinen .fullname zu haben, zumindest nicht auf meiner 3.5. –

Antwort

0

(Veröffentlicht im Namen des OP).

Duh! Es ist ____name____ (das ist Dunder Name Dunder, ein echter Dunder mischt sich mit der Formatierung!

Verwandte Themen