FTP Error 550

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
hirny199
User
Beiträge: 5
Registriert: Mittwoch 9. Oktober 2019, 11:03

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:)
Benutzeravatar
__blackjack__
User
Beiträge: 13111
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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
hirny199
User
Beiträge: 5
Registriert: Mittwoch 9. Oktober 2019, 11:03

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
Benutzeravatar
__blackjack__
User
Beiträge: 13111
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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
hirny199
User
Beiträge: 5
Registriert: Mittwoch 9. Oktober 2019, 11:03

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:)
hirny199
User
Beiträge: 5
Registriert: Mittwoch 9. Oktober 2019, 11:03

oke das programm wirft mir nun zumindest keinen fehler mehr, allerdings bekomme ich nun keinen fehler und keine datei.

habe ich evtl irgendetwas vergessen ?
Benutzeravatar
__blackjack__
User
Beiträge: 13111
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:

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()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
hirny199
User
Beiträge: 5
Registriert: Mittwoch 9. Oktober 2019, 11:03

ahh oke ich verstehe.
ich danke dir vielmals, das programm läuft soweit.

ich werden noch ein wenig mit den von dir genannten verbesserungen arbeiten um das von dir gezeigte zu festigen.

danke für deine zeit :)
Antworten