Ok - hab das ganze nochmals auf eine andere Partition installiert - diesemsla scheint es gutgegangen zu sein - allerdings kommt jetzt wieder ein Script error !
Traceback (most recent call last):
File "ftp.py", line 34, in ?
ftp.connect(host=ip, port=port)
File "D:\Python23\lib\ftplib.py", line 117, in connect
for res in socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM):
socket.gaierror: (9, 'getaddrinfo failed')
ftp info aus datei einlesen und verzeichnisliste wegschreibe
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
lass dir mal mit print ip, port vor der zeile mit dem ftp.connect..., die IP und den Port ausgeben. vielleicht hast Du eine falsche IP oder einen falschen Port in der liste.
Gruß
Dookie
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Guten Morgen !
Ich denk der fehler liegt darin das ip und port nicht gedefiniert sind ...
F:\Python23>python.exe ftp.py
Ip Port
Traceback (most recent call last):
File "ftp.py", line 28, in ?
ftp.connect(host=ip, port=port)
File "F:\Python23\lib\ftplib.py", line 117, in connect
for res in socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM):
socket.gaierror: (9, 'getaddrinfo failed')
Ich denk ich hab doch irgendwas falsch gemacht ...
Ich denk der fehler liegt darin das ip und port nicht gedefiniert sind ...
Code: Alles auswählen
for daten in ftp_liste:
ip = "IP".title()
port = "Port".title()
user = "User".title()
paswd = "Password".title()
print ip, port
ftp.connect(host=ip, port=port)
ftp.login(user=user,passwd=paswd)
ftp.retrlines('LIST')
ftp.quit()
Ip Port
Traceback (most recent call last):
File "ftp.py", line 28, in ?
ftp.connect(host=ip, port=port)
File "F:\Python23\lib\ftplib.py", line 117, in connect
for res in socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM):
socket.gaierror: (9, 'getaddrinfo failed')
Ich denk ich hab doch irgendwas falsch gemacht ...
Ahhh hab den Fehler selbst schon gefunden - schein da was falsch begriffen zu haben . Jetzt funzt es auch !
Ein Problem ist allerdings noch da - wenn es einen timout gibt - dann bricht python ab . Das muss ich noch irgendwie abfangen ...
Ein Problem ist allerdings noch da - wenn es einen timout gibt - dann bricht python ab . Das muss ich noch irgendwie abfangen ...
Es scheint eine Funktion zu geben die "ftp.all_errors" heisst allerdings bin ich mir nicht sicher ob sie hierfuer geignet ist und wie ich sie anwenden soll ?
Ok hier meine Loesung :
Funktioniert auch prima !
Danke euch allen fuer die Hilfe !!
Code: Alles auswählen
for daten in ftp_liste:
ip = daten["IP"]
port = daten["Port"]
user = daten["Username"]
paswd = daten["Password"]
print ip, port
try:
ftp.connect(host=ip, port=port)
ftp.login(user=user,passwd=paswd)
ftp.retrlines('LIST')
ftp.quit()
except ftplib.all_errors:
print "Connection error"
Danke euch allen fuer die Hilfe !!
Na dann komt jetzt doch noch ne Frage
Wie kann ich fehler mit dem in und auslesen abfangen ? Im Moment stopert er noch ueber ein paar Dinge - es waere einfacher wenn es einfach eine Fehlermeldung ausspucken wuerde und dann "weiter im Text" ?
Wie kann ich fehler mit dem in und auslesen abfangen ? Im Moment stopert er noch ueber ein paar Dinge - es waere einfacher wenn es einfach eine Fehlermeldung ausspucken wuerde und dann "weiter im Text" ?
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
erstmal würde ich die Leseroutine robuster machen. Zumindest kann Gross/Kleinschreibung ignoriert werden. Dann kann auch überprüft werden, ob die Schlüssel erlaubt sind.
Gruß
Dookie
Code: Alles auswählen
allowed_keys = ["sitename", "ip", "port", "username", "password"]
def read_ftp_dicts(fname):
""" Lese ftp-Verbindungs-daten aus der Datei 'fname' """
ftp_daten = []
f = file(fname,'r')
znr = -1
for line in f:
znr += 1
datas = line.split("=", 1)
if len(datas) == 2: # line hat ein =
key = datas[0].strip().lower() # achtung alle Schluessel klein
if not key in allowed_keys:
print "Unbekannter Schluessel '%s' in Zeile %i in Datei %s" % (key, znr, fname)
else:
value = datas[1].strip()
if key == "sitename": # neuer Datensatz
ftp_daten.append({key : value})
else: # letzten Datensatz erweitern
ftp_daten[-1][key] = value
close(f)
return ftp_daten
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Hi !
Ja so scheint es wirklich stabiler zu sein - er stolpert immer noch ueber ein paar Datensaetze - die zum Beispiel nur 3 eintraege haben ( anonymus ) und andere an denen ich nicht sehen kann was das Problem ist . Aber das kommt nicht haeufig vor !
Darum hab ich das Program ein paar Freunden gezeigt - die fanden es auch eine gute Idee hatten aber auch noch ein paar Ideen .
Sie fanden das das Programm zu lang braucht ( ich hab keinen Timeout gesetzt ) und das ergebnis sollte besser in eine Datei geschrieben werden . Das mit der Datei - da dachte ich einfach daran es so laufen zu lassen :
ftpcheck.exe > liste.txt
Ich hab inzwischen aus dem Script eine exe gemacht ( einfacher fuer uns Windows user )
Mit dem timeout bin ich noch nicht so ganz viel weiter - hab auch hier im Forum geschaut und das folgende gesehen :
ftp.sock.settimeout(30)
Allerdings funktioniert das bei mir nicht . Hab auch hier : http://pydoc.org/2.3/ftplib.html geschaut - konnte allerdings da auch nichts finden .
Ja so scheint es wirklich stabiler zu sein - er stolpert immer noch ueber ein paar Datensaetze - die zum Beispiel nur 3 eintraege haben ( anonymus ) und andere an denen ich nicht sehen kann was das Problem ist . Aber das kommt nicht haeufig vor !
Darum hab ich das Program ein paar Freunden gezeigt - die fanden es auch eine gute Idee hatten aber auch noch ein paar Ideen .
Sie fanden das das Programm zu lang braucht ( ich hab keinen Timeout gesetzt ) und das ergebnis sollte besser in eine Datei geschrieben werden . Das mit der Datei - da dachte ich einfach daran es so laufen zu lassen :
ftpcheck.exe > liste.txt
Ich hab inzwischen aus dem Script eine exe gemacht ( einfacher fuer uns Windows user )
Mit dem timeout bin ich noch nicht so ganz viel weiter - hab auch hier im Forum geschaut und das folgende gesehen :
ftp.sock.settimeout(30)
Allerdings funktioniert das bei mir nicht . Hab auch hier : http://pydoc.org/2.3/ftplib.html geschaut - konnte allerdings da auch nichts finden .
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi auch,
bevor du da jetzt weiter machst, hab ich mal ne Frage zu der Datei mit den Informationen für die FTP-Verbindungen. Ist das Dateiformat vorgegeben oder von dir selber "ausgedacht"?
Wenn das flexibel ist, würde sich dafür eine XML-Datei anbieten. Dann könnten optionale Felder (für anonymus, z.b.) leer bleiben und es wär besser ersichtlich, welche Einträge für welche Verbindung gelten.
Die downloads könntest Du auch über Threads realisieren. Dazu gibts hier schon einen Thread.
Gruß
Dookie
bevor du da jetzt weiter machst, hab ich mal ne Frage zu der Datei mit den Informationen für die FTP-Verbindungen. Ist das Dateiformat vorgegeben oder von dir selber "ausgedacht"?
Wenn das flexibel ist, würde sich dafür eine XML-Datei anbieten. Dann könnten optionale Felder (für anonymus, z.b.) leer bleiben und es wär besser ersichtlich, welche Einträge für welche Verbindung gelten.
Code: Alles auswählen
<?xml version="1.0"?>
<FTP_Liste>
<Connection>
<Sitename>name</Sitename>
<IP>127.0.0.1</IP>
<Port>27</Port>
<User>bla</User>
<Password>blabla</Password>
</Connection>
<Connection>
<Sitename>Suse</Sitename>
<IP>ftp.suse.org</IP>
<Port>27</Port>
<User></User>
<Password></Password>
</Connection>
</FTP_Liste>
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Leider ist das Format nicht selber ausgedacht . Es gibt ein program das heisst defxp - damit kann man von einem Program das Flashfxp heisst die sites.dat entschluesseln .
Und das programm spuckt die datei so aus . Leider .
In dem thread hab ich auch die Sache mit dem Timeout gefunden - hat aber leider nicht gefunktioniert . Allerdings scheint sie mir auch nicht so geeignet - da in dem Fall die Verbindung schon bestehtr - bei mir das Problem aber eher beim Verbindungsaufbau zustande kommt .
Und das programm spuckt die datei so aus . Leider .
In dem thread hab ich auch die Sache mit dem Timeout gefunden - hat aber leider nicht gefunktioniert . Allerdings scheint sie mir auch nicht so geeignet - da in dem Fall die Verbindung schon bestehtr - bei mir das Problem aber eher beim Verbindungsaufbau zustande kommt .
Anonymous hat geschrieben:Leider ist das Format nicht selber ausgedacht . Es gibt ein program das heisst defxp - damit kann man von einem Program das Flashfxp heisst die sites.dat entschluesseln .
Und das programm spuckt die datei so aus . Leider .
In dem thread hab ich auch die Sache mit dem Timeout gefunden - hat aber leider nicht gefunktioniert . Allerdings scheint sie mir auch nicht so geeignet - da in dem Fall die Verbindung schon bestehtr - bei mir das Problem aber eher beim Verbindungsaufbau zustande kommt .