Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - V1c70r

#1
Python / Sencillo cliente FTP
Julio 02, 2020, 02:45:50 AM
Hola a todos/as!

Esta es mi primera entrada aquí y quería compartir con vosotros un sencillo cliente para un servidor FTP. Estoy aprendiendo a programar en Python y pensé que una buena manera de aprender es compartir mi código y mirar las opiniones de los demás para ir acumulando ideas y consejos.

Un saludo!

Código: python

from ftplib import FTP
import os
from getpass import getpass

class ftpClient():
    def __init__(self):
        while True: 
            try:
                self.host = str(input("Host address: "))
                self.ftp = FTP(self.host)
                print(self.ftp.getwelcome())
                break
            except:
                print("Couldn't connect to host")
                pass

        self.user = input("Username: ")
        self.passwd = getpass()
        self.ftp.login(self.user, self.passwd)
       
       
   
    def menu(self):
        os.system("cls")
        print("""
           
             ___    _____  ___       ___    _                     _   
            (  _`\ (_   _)(  _`\    (  _`\ (_ )  _               ( )_
            | (_(_)  | |  | |_) )   | ( (_) | | (_)   __    ___  | ,_)
            |  _)    | |  | ,__/'   | |  _  | | | | /'__`\/' _ `\| | 
            | |      | |  | |       | (_( ) | | | |(  ___/| ( ) || |_
            (_)      (_)  (_)       (____/'(___)(_)`\____)(_) (_)`\__)

            1. Download Files for FTP server
            2. Upload Files for FTP server
        """)

#LLama al metodo menu() para despues pregunta la opción que deseamos, valida el valor de entrada y llama al metodo correspondiente.
    def main(self):
        self.menu()
        while True:
            self.option = int(input("What is your option? > "))
            if self.option == 1:
                self.downloadFile()
                break
            elif self.option == 2:
                self.uploadFile()
                break
            else:
                print("Incorrect options, try again!")

# Imprime archivos y directorios remotos, descarga el contenido del fichero citado y lo copia a uno nuevo.
# Por ultimo imprime el contenido del directorio local
    def downloadFile(self):
        self.ftp.retrlines("LIST")
        self.file = str(input("Which file? > "))
        try:
            self.ftp.retrbinary("RETR " + self.file, open(self.file, "wb").write)
            print(os.listdir())
            print("Succesful download")
        except:
            print("An error ocurred :(")
   
#Imprime los archivos locales del directorio en el que nos encontramos, abrimos el archivo en modo lectura binario para luego pasarlo ....
#Como parametro de ftp.storbinary para subirlo después.
    def uploadFile(self):
        print(os.listdir())
        self.file = str(input("Which file > "))
        self.open = open(self.file, "rb")
        try:
            self.ftp.storbinary("STOR " + self.file, self.open)
            self.ftp.retrlines("LIST")
            print("Succesful upload!")
        except:
            print("An error ocurred")

if __name__ == "__main__":     
    client = ftpClient()
    client.main()