elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Python (Moderador: Danielㅤ)
| | |-+  [Python] Subir archivos a ftp.. ¿Por qué carajos pasa esto?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Subir archivos a ftp.. ¿Por qué carajos pasa esto?  (Leído 3,406 veces)
GreenTick

Desconectado Desconectado

Mensajes: 89


Texto personal?


Ver Perfil WWW
[Python] Subir archivos a ftp.. ¿Por qué carajos pasa esto?
« en: 24 Agosto 2016, 01:45 am »

Buenas a to2! Como siempre, primero comentaré mi caso y despues expondré mis preguntas....

Llevo unos días dandole al python aver si avanzo algo..; he comenzado un proyecto.. (quizás a mucha gente le resultará inutil; ami me fascina) de crear un Administrador de Archivos con algunas funciones guapas...
En si; no es un administrador de archivos por comandos tán rudimentario como el que incluye la CMD con los comandos cd..ls..etc (aunque los usa en el código)
En si; es un administrador de archivos de fácil utilidad; te marca las opciones en un menú y los archivos cada uno con una id... algo bastante fácil...

He creado ya la opción de entrar en ficheros; y el de ir a la carpeta principal (/) .en un principio será para windows y linux; sólo que esta hecho mas que nada para ir tirando en linux. (Por la raíz)

Seguramente; mis técnicas de programacion seran muy novatas para vuestro nivel; ya que no llevo ni un mes en python.. pero espero que podáis entender el codigo...

Ahora expongo mi pregunta!!
El caso es; que quería implementar la opcion 6; que es la de subir un archivo a un servidor FTP. tengo montado un servidor FTP; y he creado un script aparte; en otro archivo, el cual me sube los archivos al servidor FTP sin ningun problema. el caso; es que cuando lo he ido a meter a la opcion 6 (if opcion_administrador == '6') me salta el siguiente error:

Citar
File "Explorador.py", line 140, in <module>
    ftp.storlines('STOR %s'%nombre_archivo, open(nombre_archivo, 'r'))
TypeError: an integer is required

A continuación os dejo los códigos para que los probeis vosotros mismos. Cambien IP y PORT por la ip y el puerto del servidor; y USER Y PASS por la contraseña.. (por si las moscas eje eje)

¡CODIGO DEL SCRIPT QUE SUBE UNICAMENTE ARCHIVO AL FTP¡ (funciona)
Código:
from ftplib import FTP
from subprocess import call

nombre_archivo = str(raw_input('Introduce la raiz completa del archivo (EJ: /root/Escritorio/archivo.txt)'))
ftp = FTP()
ftp.connect('ip', port, -999)
ftp.login('user', 'pass')
ftp.storlines('STOR %s'%nombre_archivo, open(nombre_archivo, 'r'))





¡CODIGO DEL PROGRAMA ENTERO QUE SALTA EL ERROR ANTERIORMENTE MENCIONADO AL PULSAR LA OPCION 6 E INTRODUCIR LA RUTA! (En negrita donde surge el error)

Código:
# -*- coding: utf-8 -*-
from ftplib import FTP
from os import *
from subprocess import *
from sys import *


espacio = ' '
gbajo = '_'
v = version

# Pantalla de inicio
print "Bienvenido a la beta cerrada del explorador de archivos"
print "Desarrollado por la comunidad abierta 8noobs"
print "más info en: www.8noobs.hol.es"
print "\nTu versión de python es:\n%s"%v
pausa = raw_input('\tpulsa enter para continuar')

# Comienza el programa
system("clear")
## En esta parte pregunta la version, es muy importante
print 'Termina de configurar el Explorador para que funcione correctamente.'
sistema_operativo = str(raw_input('Introduce "windows" o "linux dependiendo de tu sistema operativo\t'))
while sistema_operativo != 'linux' and sistema_operativo != 'windows':
    sistema_operativo = str(raw_input('Introduce "windows" o "linux"'))
if sistema_operativo == 'linux':
    raiz = '/'
    seguir = str(raw_input('Quiere escanear los archivos del directorio raíz?\t'))
elif sistema_operativo == 'windows':
    raiz = 'C:\\'   #Creo que aqui esta mal. testear en windows
    seguir = str(raw_input('Quiere escanear los archivos del directorio raíz?\t'))
###Ahora ya ha elegido variable a sistema_operativo, y dependiendo de cual
###eligira la raiz correcta; y la introducira en la variable raiz

# Aqui comienza el bucle del programa
while seguir == 'si':
    call('clear')
    print '###################################################################'
    print '#Raiz actual: %s#'%raiz
    print '##################################################################'
    proceso = Popen(['ls',raiz], stdout=PIPE, stderr=PIPE)
    error_econtrado = proceso.stderr.read()
    proceso.stderr.close()
    listado_string = proceso.stdout.read()
    proceso.stdout.close()
    listado_lista = listado_string.split('\n')
    clave_archivo = 0


## Bien, vamos a ver. lo que hace esto es hacer un clear en pantalla
## despues se ejecuta el comando ls con su respectiva raiz
## C: o / dependiendo del sistema. aunque mas adelante se le añadira mas
## a la raiz. despues retorna el resultado de ls+raiz a un string unico llamado
##listad_string y separa el contenido en una lista en la variable listado_lista

####Ahora viene la acción de enseñar los archivos en pantalla


    for nombre_archivo in listado_lista:
        if clave_archivo == 0:
            print '0 ) -> %s'%listado_lista[0]
            clave_archivo += 1
        else:
            print '%d ) -> %s'%(clave_archivo,nombre_archivo)
            clave_archivo += 1

    cantidad_archivos = len(listado_lista)
    print 'se han encontrado %s archivos y/o directorios \n(el ultimo numero representa al directorio padre)'%cantidad_archivos
##### Aqui ya habrá mostrado los archivos. ahora debe aparecer el menu para elegir
##### la opción deseada. Entre ellas estará entrar en un directorio

###Aquí se muestra el menú de opciones despues de escanear los archivos
    print ''
    print '##################################'
    print '##  Opciones del administrador  ##'
    print '##################################'
    print ''
    print '1) Entrar en un directorio'
    print '2) Ir a la carpeta principal'
    print '3) Copiar un archivo en una ruta absoluta'
    print '4) ver permisos de un archivo/directorio'
    print '5) cambiar permisos de un archivo/directorio'
    print '6) Enviar archivo a servidor FTP'
    opcion_administrador = str(raw_input('-> Introduce el numero de la opcion elegida: '))

## En la linea de arriba, pide el valor de la variable opcion_administrador.
## dependiendo de ese valor, ejecutara una opcion del menu u otra

######### Opcion 1
    if opcion_administrador == '1':
        directorio_elegido = int(raw_input('Introduce el nombre del archivo a entrar:\t'))

######### Si el numero introducido es el ultimo archivo, borrará la variable ultimo_archivo
######### La variable ultimo_archivo se almacena una vez entras en un archivo.
######### Hay que pensar una manera mejor, para poder almacenar todas las partes
######### de la raiz y asi poder ir hacia atras desde cualquier carpeta
######### (por ahora solo se puede ir hacia atras una vez, ya que solo se almacena una vez
######### la variable ultimo_archivo
        if directorio_elegido == cantidad_archivos-1:
            print 'se eliminara el siguiente archivo de la ruta "%s"'%ultimo_archivo
            raiz = raiz.strip(ultimo_archivo)
########### y si el numero de directorio es un directorio real,se añadira / o \ ependiendo de
########### si es windows o linux, y seguidamente se le añadira el directorio elegido al string
########### de la variable raiz. para cuando se vuelva a repetir el bucle while del principio
########### Esta vez, haga el comando "ls" dentro de la raiz dictada nuevamente
        else:
            if sistema_operativo == 'linux':
                raiz += '/'
            elif sistema_operativo == 'windows':
                raiz += '\\'
            ### aqui hay que poner bien el separador de windows, no se si lo coloque bien
            raiz += listado_lista[directorio_elegido]
            ultimo_archivo = listado_lista[directorio_elegido]
        raiz = str(raiz)
        print 'El directorio seleccionado es "%s"'%listado_lista[directorio_elegido]
        seguir = str(raw_input('pulse enter para continuar'))
        seguir = 'si'



#########opcion 2
    if opcion_administrador == '2':
        if sistema_operativo == 'linux':
                raiz = '/'
        elif sistema_operativo == 'windows':
                raiz = 'C:\\'





######### Opcion 6


[b] if opcion_administrador == '6':
        nombre_archivo = str(raw_input('Introduce la raiz completa del archivo (EJ: /root/Escritorio/archivo.txt)'))
        ftp = FTP()
        ftp.connect('ip', port, -999)
        ftp.login('user'', 'pass')
        ftp.storlines('STOR %s'%nombre_archivo, open(nombre_archivo, 'r'))[/b]




os dejo un video del script por si alguien no lo entiende como va...


« Última modificación: 24 Agosto 2016, 01:50 am por GreenTick » En línea

8Noobs - Más que una comunidad; una familia.
www.telegram.me/proyecto8NOOBS

Ser humilde, significa entender que algún día podrás ver al de arriba bajo tus pies; y al que te esta lamiendo las suelas saltando encima tuya.
Aelium_Kah

Desconectado Desconectado

Mensajes: 2


"Being good to be useful"


Ver Perfil
Re: [Python] Subir archivos a ftp.. ¿Por qué carajos pasa esto?
« Respuesta #1 en: 24 Agosto 2016, 02:55 am »

Muy buenas Green. Por alguna razón que se me escapa la linea:
ftp.storlines('STOR %s'%nombre_archivo, open(nombre_archivo, 'r'))
da error con respecto al nombre de archivo, supongo porque estás metiendo toda la ruta del nombre como por ejemplo
/home/user/leeme.txt y da error. Mi recomendacion de codigo es esta:



if opcion_administrador == '6':
        nombre_archivo = str(raw_input('Introduce la raiz completa del archivo (EJ: /root/Escritorio/archivo.txt)'))
        nombre_remoto = str(raw_input('Introduce el nombre remoto de archivo:'))
        ftp = FTP()
        ftp.connect('ip', port, -999)
        ftp.login('user'', 'pass')
        ftp.storlines('STOR " + nombre_remoto, open(nombre_archivo, 'r'))




Espero que te sirva ;)


En línea

GreenTick

Desconectado Desconectado

Mensajes: 89


Texto personal?


Ver Perfil WWW
Re: [Python] Subir archivos a ftp.. ¿Por qué carajos pasa esto?
« Respuesta #2 en: 24 Agosto 2016, 03:01 am »

Muchas gracias compañero!
un saludo y nos vemos por telegram!  ;-)
En línea

8Noobs - Más que una comunidad; una familia.
www.telegram.me/proyecto8NOOBS

Ser humilde, significa entender que algún día podrás ver al de arriba bajo tus pies; y al que te esta lamiendo las suelas saltando encima tuya.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
por k pasa esto?
Hacking Mobile
Hell_Reuter 9 6,527 Último mensaje 25 Septiembre 2006, 13:07 pm
por Hell_Reuter
por que pasa esto ?
Wireless en Windows
kuison 4 3,625 Último mensaje 5 Julio 2011, 22:58 pm
por kuison
Por que pasa esto con mi pc
Hardware
BrokerJoker 5 3,392 Último mensaje 21 Mayo 2012, 18:23 pm
por Aprendiz-Oscuro
[Python]Subir archivos via FTP
Python
Arnau27 1 3,807 Último mensaje 20 Septiembre 2013, 09:57 am
por fallout20xx
[AYUDA][PYTHON] Leer y guardar archivos .exe de forma hexadecimal en python???
Scripting
Noxware 3 5,817 Último mensaje 22 Agosto 2014, 09:33 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines