Bin dabei mir ein Skript zu schreiben welches eine Liste von Dateien auf einen FTP-Server hochlädt. Dabei handelt es sich um relativ große dateien und die warscheinlichkeit das die vorhandene Internetverbindung in meinem System abbricht ist auch zimlich hoch.
Deswegen muss eine Fortsetzmöglichkeit her die es ermöglicht auch nach einem Verbindungsabruch wieder fortzufahren.
mein bisheriger Code funktioniert soweit:
Code: Alles auswählen
def connect_ftp():
"""
Verbinden mit dem FTP-Server
@return: Gibt eine Referenz der FTP-Verbindung zurueck
"""
ftp = ftplib.FTP()
try:
ftp.connect(upload_configuration.TARGET_HOST)
ftp.login(upload_configuration.FTP_USER, upload_configuration.FTP_PWD)
print "Verbinden mit Ftp-Server ok\n"
return ftp
except Exception, exc:
print "Verbinden mit Ftp-Server fehlgeschlagen: Fehlermeldung" + str(exc) + "\n"
send_mail(FAILD_FTP_SUBJECT, FAILD_FTP_CONTAIN + str(exc))
sys.exit(1)
Code: Alles auswählen
def upload_files():
"""Dateien auf den FTP-Server hochladen"""
is_upload_true = True
file_status = {"FAILD": "Fehlgeschlagen", "OK": "OK"} #~~~
directory = "/umts/transfer"
#Liste der Dateien fuer den upload auf den FTP-Server
file_list = {
"datei_eins": file_status["FAILD"],
"datei_zwei": file_status["FAILD"],
}
file_directory = "/home/temp/" #LOESCHEN NUR ZUM LOKALEN TESTEN
Configuration.FRAME_LOGGER_OUTPUT_PATH = file_directory #LOESCHEN NUR ZUM LOKALEN TESTEN
ftp = connect_ftp()
#Liste der Dateien durchgehen und jede Datei uploaden
#Bei Fehler Status der Datei aendern
for filename in file_list:
try:
f = open(Configuration.FRAME_LOGGER_OUTPUT_PATH + filename, "r")
ftp.cwd(directory)
ftp.storbinary("STOR " + filename, f)
f.close()
file_list[filename] = file_status["OK"]
print filename + " upload ok\n"
except Exception, exc:
is_upload_true = False
print filename + " upload fehlgeschlagen: Fehlermeldung:" + str(exc) + "\n"
ftp.quit()
#Email senden bei Erfolg/Misserfolg
if is_upload_true == True:
extension_text = create_email_body(file_list)
send_mail(SUCCESS_SUBJECT, SUCCESS_CONTAIN + extension_text)
else:
extension_text = create_email_body(file_list)
send_mail(FAILD_SUBJECT, FAILD_CONTAIN + extension_text)
Gruß
Alex