[Código-Python]Cliente FTP V2 - JaAViEr | 0x5d

Iniciado por 0x5d, 1 Mayo 2012, 11:40 AM

0 Miembros y 1 Visitante están viendo este tema.

0x5d

¡ Hola, buen día !

Hoy me tomé un par de minutos para programar un cliente FTP oficial del sitio web. Es por consola, pero vamos que ya estoy en planes de pasarlo a PyQT4. El código consta de 133 humildes líneas, intenté utilizar el máximo control de errores en el programa, para evitar que el programa salga de su curso normal... Si alguien ve que falla en algo por favor avisad aquí mismo ! , el cliente FTP por consola nos permitirá un par de acciones una vez conectado, estas son las básicas:

1.- Listar directorios / Archivos.
2.- Ingresar a un directorio.
3.- Eliminar un archivo ó directorio.
4.- Crear un directorio.
5.- Descargar un archivo remoto.
6.- Enviar un archivo local.
7.- Ver peso de un archivo remoto.
8.- Desconectar.


No creo que sea necesario describir cada una, así que los invito a leer el código :
Código (python) [Seleccionar]

# -*- coding: utf-8 -*-
from ftplib import FTP
while True:
estado_conexion = 0
try:
print """
¡ Hola, bienvenido al cliente FTP - RootCodes.Com !

¿ Qué deseas hacer ?

1.- Conectar a servidor FTP.
2.- Creditos/Autor.
3.- Salir.
"""
opc = input("Opcion:")
if opc == 1:
try:
servidor = raw_input("Servidor: ")
usuario = raw_input("Usuario: ")
clave = raw_input("Clave: ")
sesion = FTP(servidor)
print sesion.getwelcome()
try:
estado_conexion = 1
sesion.login(usuario,clave)
pasive_mode = raw_input("¿ Desea activar el modo pasivo ? (s/n) > ").lower()
if pasive_mode == "s":
print "¡ Activando modo pasivo !"
try:
sesion.set_pasv(True)
print "¡ Modo pasivo activado !"
except:
print "¡ No se pudo activar modo pasivo !"
while estado_conexion!=0:
print "\n\nActualmente te encuentras en:", sesion.pwd()
print """
1.- Listar directorios / Archivos.
2.- Ingresar a un directorio.
3.- Eliminar un archivo ó directorio.
4.- Crear un directorio.
5.- Descargar un archivo remoto.
6.- Enviar un archivo local.
7.- Ver peso de un archivo remoto.
8.- Desconectar.
"""
try:
in_server = input("Opción: ")
except:
print "¡ Ingresa un número porfavor !"
if in_server == 1:
try:
print "Lista de archivos / directorios:"
sesion.dir()
except:
print "¡ Error al listar archivos / directorios !"
elif in_server == 2:
try:
join_dir = raw_input("Directorio: ")
sesion.cwd(join_dir)
except:
print "¡ Error al intentar ingresar al directorio !"
elif in_server == 3:
print "1.- Eliminar archivo.\n2.- Eliminar Directorio."
try:
que_eliminar = input("Opción: ")
except:
print "¡ Por favor ingresa un número válido !"
if que_eliminar == 1:
try:
archivo_del = raw_input("Archivo a eliminar: ")
sesion.delete(archivo_del)
print "¡ Archivo eliminado correctamente !"
except:
print "¡ Error al intentar eliminar el archivo !"
elif que_eliminar == 2:
try:
carpeta_del = raw_input("Directorio a eliminar: ")
sesion.rmd(carpeta_del)
print "¡ Directorio Eliminado correctamente !"
except:
print "¡ Error al intentar eliminar el directorio !"
else:
print "¡ Opción ingresada no existe !"
elif in_server == 4:
try:
crear_carpeta = raw_input("Nombre del nuevo directorio: ")
sesion.mkd(crear_carpeta)
print "¡ Nuevo directorio creado con éxito !"
except:
print "¡ Error al intentar crear el directorio !"
elif in_server == 5:
try:
archivo_download = raw_input("Archivo a descargar: ")
sesion.retrbinary("RETR %s"%archivo_download, open(archivo_download,"wb").write)
print "¡ Archivo descargado con éxito !"
except:
print "¡ No se pudo descargar el archivo !"
elif in_server == 6:
try:
archivo_local = raw_input("Archivo local: ")
file_local = open(archivo_local,'rb')
sesion.storbinary("STOR "+archivo_local, file_local)
file_local.close()
print " ¡Archivo enviado con éxito !"
except:
print "¡ No se pudo enviar el archivo !"
elif in_server == 7:
try:
archivo_peso = raw_input("Archivo local: ")
print "El peso del archivo %s, es: %s"%(archivo_peso,sesion.size(archivo_peso))
except:
print "¡ No se pudo obtener el peso !"
elif in_server == 8:
sesion.quit()
estado_conexion=0
print "¡ Desconectado con éxito !"
except:
print "¡ No se pudo lograr la conexión !"
except:
print "¡ Error en los datos de conexión !"

elif opc == 2:
print """
Créditos -> Autor : JaAViEr || 0x5d
  Twitter : @0x5d
  WebSite : http://www.rootcodes.com
"""

elif opc == 3:
print "¡ Gracias por utilizar Cliente FTP - RootCodes.Com !"
break
except:
print "¡ Opción incorrecta !"

¡ Espero les haya gustado !

Fuente : http://rootcodes.com/pythoncliente-ftp-rootcodes-com/

Saludos, Javier.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

Runex

Bueno es ;), al final lo hicistes :).

Espero la version Pyqt4, seguro que sale bien :)
"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".

0x5d

Cita de: Runex en  1 Mayo 2012, 15:57 PM
Bueno es ;), al final lo hicistes :).

Espero la version Pyqt4, seguro que sale bien :)
El source original lo perdí, así que lo estoy empezando casi de 0 !
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

polmadur

una pregunta, que diferencia hay entre input y raw_input? Yo siempre he utilizado el segundo.

Arnau27

#4
Cita de: polmadur en  4 Mayo 2012, 10:09 AM
una pregunta, que diferencia hay entre input y raw_input? Yo siempre he utilizado el segundo.
Bueno, con raw_input se pueden manejar errores, en cambio con input no. Aunque a partir de la version 3.0 de python, como bien sabe 0x5d, raw_input desaparece i solo queda input que adquiere la capacidad de manejar errores.

Edito: 0x5d Aprovecho para felicitarte por tu trabajo con python.
La confianza es la base de la elegancia.

0x5d

Cita de: Arnau27 en  4 Mayo 2012, 16:37 PM
Bueno, con raw_input se pueden manejar errores, en cambio con input no. Aunque a partir de la version 3.0 de python, como bien sabe 0x5d, raw_input desaparece i solo queda input que adquiere la capacidad de manejar errores.

Edito: 0x5d Aprovecho para felicitarte por tu trabajo con python.
¡ Muchas Gracias ! aunque mis trabajos no son nada del otro mundo por ahora :c

Cita de: polmadur en  4 Mayo 2012, 10:09 AM
una pregunta, que diferencia hay entre input y raw_input? Yo siempre he utilizado el segundo.
raw_input() se utiliza para insertar valores alfanuméricos, mientras que el
input() lo utilizamos solo para valores numéricos :D

Eso en las versiones < 3.0 de Python

¡ Saludos, Javier !
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !