Client FTP

Stato
Discussione chiusa ad ulteriori risposte.

!R~

Utente Silver
22 Maggio 2009
0
0
0
55
Client FTP che permette il download e l'upload di file:
Codice:
import ftplib
def menu():
	print "1) Download file"
	print "2) Upload file"
def data():
    global server, user, passw
	server = raw_input("Server: ")
	user = raw_input("User: ")
	passw = raw_input("Password: ")
def download():
	connection = FTP(server, user, passw)
	connection.retrlines("LIST")
	f = raw_input("File to download: ")
	f2 = f	
	file_open = open(f, "wb")
	connection.retrbinary("RETR " + f2, file_open.wirte)
	file_open.close()
	connection.quit()
	print "Download completed."
def upload():
	connection = FTP(server, user, passw)
	f = raw_input("File to hostie: ")
	f2 = f
	file_open = open(f, "rb")
	connection.storbinary("STOR " + f2, file_open)
	file_open.close
	connection.quit()
	print "Upload completed."
print "		---------- FTP Client ----------\n"
menu()
print
while True:
	choice = raw_input("Choose an option: ")
	if choice == "1":
		data()
		download()
		break
	elif choice == "2":
		data()
		upload()
		break
	else:
		print "Invalid choice."
 
('sto utente mi frega tutte le idee.... XD)

è buono, nn vedo orrori, però se vuoi un consiglio usa maggiormente la programmazione ad oggetti, ti fai una bella classe ftp() con come metodi le funzioni che hai scritto (opportunamente modificate) e lasci processare tutto alla classe, lasciando al while true solo la ricezione dell'input dell'utente.

Magari potresti istanziare un oggetto per ogni server, invece di chiederlo ogni volta, il che diventa lungo da scrivere.

Altro consiglio: nn fare un menù numerico, scegli una serie di parole chiave (chessò, "connect", "up", "down") e le rilevi come comando tramite regex, o anche semplicemnte string slicing (str[x:y]). Così viene + carino.

I miei ovviamente sono solo consigli, per un client semplice va bene anche così, però se tu dovessi aggiungere un comando ora come ora dovresti modificare le stringhe ed inserire un altro elif nel while, se usi la programmazione ad oggetti, crei un nuovo metodo, e magari il parsing lo inserisci in un altro metodo (esempio Ftp.action(s) o Ftp.parse(s)) così il codice viene + ordinato e + leggibile.

Ultimo consiglio "stilistico: nel sorgente lascia qualche riga vuota o di commento per separare le funzioni, risulta + facile al lettore.

(ti ho fatto le stesse raccomandazioni che in passato fecero a me.)
 
Grazie, è sempre un piacere ricevere dei consigli da utenti più esperti di me in materia. Ne terrò conto :)
 
penso dovresti impostare le variabili nella funzione data come global, altrimenti non te le vede la funzione download....
nella riga 11 è retrlines("LIST") senza i...

per il resto penso vada, anche se non dai la possibiltà di navigare nelle cartelle....il che lo limita.
 
Verissimo, che errori da scemo :p
Ho modificato il sorgente nel primo post.
Grazie per il debug.
 
Bukowsk! ha detto:
penso dovresti impostare le variabili nella funzione data come global, altrimenti non te le vede la funzione download....
nella riga 11 è retrlines("LIST") senza i...

per il resto penso vada, anche se non dai la possibiltà di navigare nelle cartelle....il che lo limita.

azz, vero, nn me n'ero accorto XD
 
Stato
Discussione chiusa ad ulteriori risposte.