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:
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)
¡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)
os dejo un video del script por si alguien no lo entiende como va...
[youtube=640,360]https://www.youtube.com/watch?v=j9aPPkrlfNM[/youtube]
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:
CitarFile "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 [Seleccionar]
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 [Seleccionar]
# -*- 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...
[youtube=640,360]https://www.youtube.com/watch?v=j9aPPkrlfNM[/youtube]