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
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...