Hallo liebes Forum,
Ich bin Daniel 23 jahre alt und ein anfänger wenn man es so nennen mag:)
und zwar wollte ich der interesse halber ein ftp script schreiben, habe mich dazu etwas schlau gelesen und einiges probiert was für mich verständlich war.
nun bekomme ich allerdings immer den fehler das das angegebene verzeichnis nicht existiert "ftplib.error_perm: 550 /Filme/: No such file or directory".
mich würde nun interessieren wieso mir dieser fehler geworfen wird und wie man das ganze evtl. besser lösen kann bzw. ob ich etwas übersehen habe.
ich melde mich als root an und bis ich das verzeichnis angebe wird auch verbunden wies aussieht.
hier der code:
from ftplib import FTP
ftp = FTP('000.000.000.000')
ftp.login(user='user', passwd='pwd')
ftp.cwd('sync/')
#def grabFile():
# filename = 'test.txt'
# localfile = open(filename, 'wb')
# ftp.retrbinary('RETR ' + filename, localfile.write, 1024)
#ftp.quit()
#localfile.close()
ich hoffe ihr könnt mir helfen da ich sehr interessiert daran bin neues zu lernen.
sollte ich etwas beim erstellen des themas falsch gemacht haben sollte entschuldige ich mich, weist mich gerne darauf hin damit das beim nächsten mal klappt
vielen dank im voraus:)
FTP Error 550
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@hirny199: Wenn Du nach "sync/" wechselst bekommst Du das "/Filme/" nicht existiert? Das ist komisch. Kann es sein dass das Problem schon beim FTP-Server existiert und dort ein Wurzelverzeichnis angegeben wurde das es nicht gibt? Kannst Du denn mit einem FTP-Client darauf zugreifen?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
oh entschuldigung
ich habe verschiedene pfade ausprobiert es gibt sowohl sync als auch Filme und die fehlermeldung taucht dann auch mit dem jeweiligen verzeichniss auf.
sowohl auf windows als auch linux komme ich per ftp auf den server, per handy und ftp-app auch.
enschuldigung für die verwirrung
ich habe verschiedene pfade ausprobiert es gibt sowohl sync als auch Filme und die fehlermeldung taucht dann auch mit dem jeweiligen verzeichniss auf.
sowohl auf windows als auch linux komme ich per ftp auf den server, per handy und ftp-app auch.
enschuldigung für die verwirrung
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@hirny199: Kommen die Pfade die Du probierst auch in der Ausgabe der `dir()` -Methode oder der Rückgabe der `nlst()`-Methode vor?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
auf keinem meiner zwei testmaschinen tauchen die oben genannten pfade auf :/
testmaschine 1 ist ein server mit openmediavault, auf diesem sehe ich nur die öffentlich gemachten ordner.
testmaschine 2 ist ein gemieteter server, dort werden mir nur zwei ordner angezeigt.
aber das erklärt schonmal warum die ordner nicht gefunden werden:)
testmaschine 1 ist ein server mit openmediavault, auf diesem sehe ich nur die öffentlich gemachten ordner.
testmaschine 2 ist ein gemieteter server, dort werden mir nur zwei ordner angezeigt.
aber das erklärt schonmal warum die ordner nicht gefunden werden:)
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@hirny199: Wo vergessen? Bei dem Quelltext in Deinem ersten Beitrag ist ja alles ausser Verbindung zum FTP-Server und wechseln in eine Verzeichnis auf dem Server auskommentiert. Auskommentierter Code tut per Definition nichts.
Wenn die Funktion nicht auskommentiert ist, muss man sie auch aufrufen, damit der Code darin abläuft.
Also mal ein paar Anmerkungen zu dem Quelltext: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `grab_file()` anstelle von `grabFile()`.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Funktionen und Methoden sollten alles was sie ausser Konstanten benötigen als Argument(e) übergeben bekommen. `grab_file()` braucht also ein Argument für das `FTP`-Objekt.
Die `grab_file()`-Funktion sollte nicht die Verbindung zum FTP-Server beenden. Das sollte dort passieren wo die Verbindung auch aufgebaut wird, in der Hauptfunktion. Und da dann am besten mit der ``with``-Anweisung. Die sollte man auch für `localfile` verwenden.
Die Blockgrösse für die Übertragung der Binärdatei würde ich nicht angeben. Was ist denn an dem Kilobyte besser als dem Defaultwert von 8 KiB?
Das sähe dann so aus:
Wenn die Funktion nicht auskommentiert ist, muss man sie auch aufrufen, damit der Code darin abläuft.
Also mal ein paar Anmerkungen zu dem Quelltext: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `grab_file()` anstelle von `grabFile()`.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Funktionen und Methoden sollten alles was sie ausser Konstanten benötigen als Argument(e) übergeben bekommen. `grab_file()` braucht also ein Argument für das `FTP`-Objekt.
Die `grab_file()`-Funktion sollte nicht die Verbindung zum FTP-Server beenden. Das sollte dort passieren wo die Verbindung auch aufgebaut wird, in der Hauptfunktion. Und da dann am besten mit der ``with``-Anweisung. Die sollte man auch für `localfile` verwenden.
Die Blockgrösse für die Übertragung der Binärdatei würde ich nicht angeben. Was ist denn an dem Kilobyte besser als dem Defaultwert von 8 KiB?
Das sähe dann so aus:
Code: Alles auswählen
#!/usr/bin/env python3
from ftplib import FTP
def grab_file(ftp, filename):
with open(filename, "wb") as localfile:
ftp.retrbinary("RETR " + filename, localfile.write)
def main():
with FTP("000.000.000.000") as ftp:
ftp.login(user="user", passwd="pwd")
ftp.cwd("some_folder")
grab_file(ftp, "test.txt")
if __name__ == "__main__":
main()
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware