[PIPython] script ftp
N. Wieland
nicholas
Ven 19 Nov 2004 15:16:38 CET
Ciao Riccardo ... dimmi che non ti ho detto python.it ma zope.it ...
Beh, se ti ho detto python.it ho sbagliato, la ML per i mantovani e' su
Zope.it, e questa al momento e' la lista dedicata alla ricostruzione del
sito python.it ...
- riccardo.gaggero a sogefifiltration.com :
> Sto iniziando a usare python e volevo crearmi uno script ftp client in cui
> paramentrizzo i miei dati e debba passargli solo il file origine e quello
> destinazione
> la cosa funziona ma l'eccezione degli errori per niente
> se sbaglio l'inserimento del file mi ritorna il codice del programma con gli
> evventuali errori mentre io vorrei che mi uscisse dallo script e basta..
>
> dove sbaglio??
> e la starda giusta quella dell'uso delle ftplib ??
Si, devi usare le ftplib :)
> """ Script ftp client """
> import time
> import commands
> LOG_PATH = 'c:/log/' #Path del log file
> FTP_ADDR = '10.0.2.122' #indirizzo IP della macchina remota
> FTP_USER = 'xx' #ftp username
> FTP_PWD = 'xx' #ftp password
> FTP_REMOTE_DIR = '/home/ced_rik/' #dir remota
> PATH_OUTPUT_FTP_FILE = "c:/log/" #Path del file scaricati
Programmi in C vero ? :)
Non c'e assolutamente bisogno di queste "macro", puoi tranquillamente
dare i parametri direttamente all'interno dello script.
Importa tutto all'inizio, non c'e' bisogno di importare in un secondo
tempo rendendo il tutto meno leggibile. Tanto non ti cambia la vita.
> def dataodierna():
> # Ritorna una stringa con la data di oggi in formato GGMMAA
> data = time.strftime('%d%m%y',time.localtime(time.time()))
> return data
> def updatelog(messaggio):
> # Stampa un messaggio a video e salva un log delle operazioni
> print 'log> '+messaggio
> timenowstr = time.asctime(time.localtime(time.time()))
> msgwrite = timenowstr + ": " + messaggio + '\n'
> filelog = open(LOG_PATH+'log_ftp.txt','a')
> filelog.write(msgwrite)
> filelog.close()
> def spawntarfile(ftp_file):
> # Esegue un FTP su una macchina remota e copia l'archivio
> updatelog('- inizio connessione ftp con '+FTP_ADDR)
> try:
> from ftplib import FTP
Questo e' male. Non usare questa sintassi, anche se c'e' sul manuale.
E' rischiosa, e fuori dalla libreria standard puo' darti problemi ...
> ftp = FTP(FTP_ADDR)
> updatelog('- connesso. Invio login...')
> ftp.login(FTP_USER,FTP_PWD)
> updatelog('- logged. Ricezione file...')
Puoi farlo piu' conciso, come ti ho mostrato sulla ML del LUG, dando
subito username e password.
Simple is better than complex (cfr. import this :)
> # ftp.retrbinary('RETR '+ftp_file, open(PATH_OUTPUT_FTP_FILE + ftp_file, 'wb').write)
> ftp.retrlines('RETR '+ftp_file, open(PATH_OUTPUT_FTP_FILE+ftp_file,
> 'wb').write)
> except (ftplib.error_perm, ftplib.error_temp,ftplib.error_reply,
> ftplib.error_proto):
> updatelog('- errore nella ricezione FTP. Abbandono la sessione.')
> #mettere qui il richiamo ad una routine per la gestione sistematica
> degli errori di connessione FTP, dei retry e degli abort.
> ftp.quit()
> else:
> updatelog('- chiusura FTP')
> updatelog('- copiato '+ ftp_file+' in '+
> PATH_OUTPUT_FTP_FILE+ftp_file)
> ftp.quit()
Puoi usare all_errors anziche' specificarli tutti.
> if __name__ == '__main__':
> print('\n\Script FTP')
> print('EDP Team\n\n')
> updatelog('- inizio operazioni')
> from ftplib import FTP
> ftp = FTP(FTP_ADDR)
> ftp.login(FTP_USER,FTP_PWD)
> ftp.retrlines('LIST')
> ftp.quit()
> INPUT_FILE = raw_input ("Digitare il file di scaricare: ")
> spawntarfile(INPUT_FILE)
> #commands.getoutput('rm '+bakfilename)... volendo.
> updatelog('- fine operazioni\n\n')
Qui rifai tutto da capo, e' un bel casino ...
Ci dici anche che eccezione solleva, cosi' sappiamo localizzare meglio
il problema ?
nicholas
More information about the Python
mailing list