2016-04-07 3 views
0

Ich habe es mit einem seltsamen Problem zu tun. Betrachten Sie diese einfachen Code:Inkonsistenz im Python-Systemattribut "__file__" auf verschiedenen Linux-Distributionen

print(__file__) 
print("***" + os.path.dirname(__file__) + "###") 

jetzt, wenn ich diesen Code auf meinem Laptop laufen, wo ich Fedora 23 OS haben, ist die Ausgabe:

/home/.../ExperimentalSystem/BullshitSetupGenerator.py 
***/home/.../ExperimentalSystem### 

den gleichen Code läuft auf Ubuntu 15.10:

BullshitSetupGenerator_delete_me.py 
***### 

kann mir jemand erklären warum? Fehle ich etwas?

+0

Es gibt keine Inkonsistenz in der Funktion dirname. Die Inkonsistenz ist in '__file__' – wim

+0

Ist die Inkonsistenz mit' dirname' oder mit '__file__'? Meine Vermutung wäre Letzteres. Führen Sie den Code mit demselben relativen Pfad an beiden Orten aus? Und schließlich, um konsistentes Verhalten zu erhalten, könnten Sie 'os.path.dirname (os.path.abspath (__ file __))' – mgilson

+0

verwenden, das mit __file__, true ist. –

Antwort

2

Sie wollen wahrscheinlich nicht rein auf das Attribut __file__ verlassen, aber Sie sicher, dass Sie einen vollständigen Pfad abspath haben:

os.path.dirname(os.path.abspath(__file__)) 
3

__file__ ist definiert durch das Argument zu Python, die es, was Ihre Datei erzählt ist. Angenommen, Sie befinden sich in einem Ordner mit der Bezeichnung Here. Sie könnten sagen python ../Here/here.py, und __file__ wäre ../Here/here.py. Wenn Sie die gleiche Datei mit nur python here.py ausgeführt haben, ist __file__here.py. Wenn Sie die Python-Datei im selben Verzeichnis ausführen, ohne einen absoluten Pfad oder einen seltsamen relativen Pfad zu verwenden, enthält die Datei keine Verzeichnisse. Das bedeutet, dass os.dirname(__file__) leer ist. Wenn Sie möchten, können Sie den absoluten Pfad mit os.path.abspath() abrufen.