Ich habe das folgende Python-Skript in einem Verzeichnis namens 'test' auf meinem Linux-Desktop:

#!/usr/bin/python

f = open('test.txt','w')
f.write('testing the script')

Es ist also /Home/Desktop/test/script.py

Wenn ich in das Verzeichnis gehe und ./script.py eingebe, funktioniert es einwandfrei und erstellt die Datei test.txt.

Aus irgendeinem Grund kann ich das Skript jedoch nicht vom Desktop aus ausführen (/Home/Desktop). Ich habe zum Beispiel ./test/script.py ausprobiert, aber nicht funktioniert.

Die Dateiberechtigungen für das Skript sind 755 und für das Verzeichnis 777.

Jede Hilfe wäre dankbar.

7
Daniel Scocco 9 Okt. 2012 im 03:45

5 Antworten

Beste Antwort

Sie können os.path.dirname() und __file__ verwenden, um absolute Pfade wie folgt zu erhalten:

#!/usr/bin/python

import os  # We need this module

# Get path of the current dir, then use it to create paths:
CURRENT_DIR = os.path.dirname(__file__)
file_path = os.path.join(CURRENT_DIR, 'test.txt')

# Then work using the absolute paths:
f = open(file_path,'w')
f.write('testing the script')

Auf diese Weise funktioniert das Skript für Dateien, die sich nur im selben Verzeichnis wie das Skript befinden, unabhängig davon, von wo aus Sie es ausführen.

17
Tadeck 8 Okt. 2012 im 23:54

In welchem Verzeichnis führen Sie aus? Sie könnten versuchen, Folgendes zu verwenden:

import os

print os.getcwd()

Um zu überprüfen, ob das Arbeitsverzeichnis Ihren Vorstellungen entspricht.

0
dckrooney 8 Okt. 2012 im 23:51

Geben Sie in Ihr open('test.txt', 'w') open(r'./test.txt', 'w') ein. Verwenden Sie beim Ausführen "python script.py. Überprüfen Sie, ob dies funktioniert.

1
alvonellos 8 Okt. 2012 im 23:49

Wenn Ihr cwd /Desktop/test ist und Sie dann versuchen, ./test/script.py auszuführen, versuchen Sie, ein Skript unter /Desktop/test/test/script.py auszuführen. Wahrscheinlicher war, dass Sie nur ./script.py machen wollten.

Abgesehen davon wäre Ihre Frage nützlicher gewesen, wenn Sie die Fehlermeldung über die Befehlszeile angegeben hätten, anstatt nur "nicht funktioniert" zu sagen.

Wenn das Skript ausgeführt wird und nichts an die Konsole zurückgegeben wird, funktioniert es höchstwahrscheinlich. Beachten Sie, dass das Öffnen einer Datei im 'w'-Modus die Datei abschneidet. Vielleicht möchten Sie ein + verwenden?

1
ernie 9 Okt. 2012 im 00:00

"Und so weiter" bedeutet nicht viel.

Wo im Dateisystem bist du? Wie ist die relative Position der Testverzeichnisse zu Ihrem Standort?

Haben Sie einen voll qualifizierten Weg ausprobiert? Z.B.,

/home/daniel/test/script.py
0
tink 8 Okt. 2012 im 23:48