FTP.dir() in Datei schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

FTP.dir() in Datei schreiben

Beitragvon BoOnOdY » Donnerstag 5. April 2007, 15:52

Hey, ich weiß, dass die Frage bestimmt doof ist, aber ich komm leider gerade net weiter.

Code: Alles auswählen

import ftplib
ftp=ftplib.FTP("1**.1**.3.***")
ftp.login("admin", "*****")
ftp.cwd("\\cdr\\checkout")
f=file("E:\AEP\\log.log","w")
f.writelines(ftp.dir())
f.close()




da bekomm ich immer den Fehler "writelines reuqires iterable argument "

Bin noch nicht so sehr bewandert in Python.


Kennt einer ein gutes Tutorial in dem man lernt Sachen in Dateien zu schreiben, auszulesen und auch zu vergleichen. Also ein bisschen ausführlicher, nicht so grob wie in den ganzen anderen tutorials.
Weil ich brauch das jetzt ziemlich ausführlich.

Gruß BoOnOdY
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Donnerstag 5. April 2007, 16:19

Ich habe jetzt gar keine Erfahrung mit der FTPlib. Aber rein ausm Bauch heraus würde ich sagen, das ``ftp.dir()`` keine Liste/Tupel oder ein anderes iterierbares Objekt zurückgibt.

``f.writelines()`` benötigt aber ein iterierbares Objekt.

Nach ein wenig austesten hab ich folgendes verwunderliches herausbekommen:

Code: Alles auswählen

In [6]: type(ftp.dir())
-rw-r--r--   1 ente     ente         8478 Mar 13 16:22 Bussysteme-Dokuementation.zip
drwxr-xr-x   5 ente     ente         4096 Mar 10 10:47 development
drwxr-xr-x   4 ente     ente         4096 Mar 20 17:08 entes-world
drwxr-xr-x   2 ente     ente         4096 Mar 11 16:42 public_html
drwxr-xr-x  12 ente     ente         4096 Apr  4 11:11 trac
Out[6]: <type 'NoneType'>



Sorry, jetz bin ich auch ein wenig überrascht.

würde mich ma interessieren ;)
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Donnerstag 5. April 2007, 16:26

Richtig, FTP.dir() gibt ("fast immer") ein UNIX-Verzeichnislisting als String zurück.

Folgendes habe ich irgendwo im ASPN-Cookbook gefunden und für sehr nützlich befunden (insbesondere die Verwendung von .split() ist sehr interessant):

Code: Alles auswählen

def parse_line(line):
    """Callback-Funktion zum Verarbeiten der Zeilen."""
    columns = line.split(None, 8)
    print columns

ftp.retrlines('LIST', parse_line)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 5. April 2007, 16:31

EnTeQuAk hat geschrieben:Sorry, jetz bin ich auch ein wenig überrascht.

Hi EnTeQuAk!

Lies dir noch mal den FTP-Teil in der Python-Dokumentation durch. ;-)
Die meisten FTP-Funktionen, die etwas vom FTP-Server holen, erwarten eine Funktion, an die sie beim Empfangen als ersten Parameter den empfangenen Text übergeben können.

``dir()`` schreibt den Ordnerinhalt nach ``stdout``, wenn diese Funktion nicht angegeben ist.

Hier ein Beispiel:

Code: Alles auswählen

>>> import ftplib
>>> ftp = ftplib.FTP(host='ftp.suse.com', user='anonymous')
>>> ret = []
>>> ftp.dir(ret.append)
>>> ret
['drwxr-xr-x    2 root     root         4096 May 26  2004 bin', 'drwxr-xr-x
2 root     root         4096 May 26  2004 dev', 'drwxr-xr-x    2 root     root
4096 Sep 10  2004 etc', 'drwxr-xr-x    2 root     root         4096 May 26
2004 lib', 'drwxr-xr-x    2 root     root         4096 Feb 13  2006 msgs', '
drwxr-xr-x    8 ftp      root         4096 Apr 04 23:12 pub', 'drwxr-xr-x    3
root     root         4096 May 26  2004 usr']
>>> ret = []
>>> ftp.retrlines("LIST", ret.append)
'226 Directory send OK.'
>>> ret
['drwxr-xr-x    2 root     root         4096 May 26  2004 bin', 'drwxr-xr-x
2 root     root         4096 May 26  2004 dev', 'drwxr-xr-x    2 root     root
4096 Sep 10  2004 etc', 'drwxr-xr-x    2 root     root         4096 May 26
2004 lib', 'drwxr-xr-x    2 root     root         4096 Feb 13  2006 msgs', '
drwxr-xr-x    8 ftp      root         4096 Apr 04 23:12 pub', 'drwxr-xr-x    3
root     root         4096 May 26  2004 usr']
>>>

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Donnerstag 5. April 2007, 16:44

gerold hat geschrieben:
EnTeQuAk hat geschrieben:Sorry, jetz bin ich auch ein wenig überrascht.

Hi EnTeQuAk!

Lies dir noch mal den FTP-Teil in der Python-Dokumentation durch. ;-)
hi hi ;) Ich wusste es :) nächtes mal werde ich es machen, bevor ich versuche Hilfe zu geben :)
Die meisten FTP-Funktionen, die etwas vom FTP-Server holen, erwarten eine Funktion, an die sie beim Empfangen als ersten Parameter den empfangenen Text übergeben können.

``dir()`` schreibt den Ordnerinhalt nach ``stdout``, wenn diese Funktion nicht angegeben ist.

Das hab ich nun auch herausgefunden *grinz*

Gut, bin still... ich höre, das ser Threadersteller etwas sagen möchte :)
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Beitragvon BoOnOdY » Donnerstag 5. April 2007, 16:45

ich bin momentan noch überwältigt ;)

aber ich bin gerade ma am austesten

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]