Pregunta
Alguien me puede ayudar.
¿Por qué no está funcionando
import ftplib
import os
def readList(request):
machine=[]
login=[]
password=[]
for line in open("netrc"): #read netrc file
old=line.strip()
line=line.strip().split()
if old.startswith("machine"): machine.append(line[-1])
if old.startswith("login"): login.append(line[-1])
if old.startswith("password"): password.append(line[-1])
connectFtp(machine,login,password)
def connectFtp(machine,login,password):
for i in range(len(machine)):
try:
ftp = ftplib.FTP(machine[i])
print 'conected to ' + machine[i]
ftp.login(login[i],password[i])
print 'login - ' + login[i] + ' pasword -' + password[i]
except Exception,e:
print e
else:
ftp.cwd("PublicFolder")
print 'PublicFolder'
def upload(filename, file):
readList()
ext = os.path.splitext(file)[1]
if ext in (".txt", ".htm", ".html"):
ftp.storlines("STOR " + filename, open(file))
else:
ftp.storbinary("STOR " + filename, open(file, "rb"), 1024)
print 'success... yra'
upload('test4.txt', r'c:\example2\media\uploads\test4.txt')`
Cuando era que estaba trabajando juntos. Pero cuando me separo en funciones a algo pasó, yo no entiendo por qué.
Solución
(Aparte de los problemas de sangrado horrible, que son presumiblemente debido a la copia y pegar fallido de lo contrario se obtendría errores de sintaxis hasta el Wazoo ...!) ...:
problema de alcance, en primer lugar: connectFtp
hace un locales ftp
variable, de forma que las variables desaparece tan pronto como la función está hecho. Entonces intentos upload
utilizando la variable, pero por supuesto que no es allí más.
Añadir un return ftp
al final de connectFtp
, un yield connectFtp
en lugar de una llamada normal al bucle en readList
, y utilizar un bucle for ftp in readList():
en upload
.
Otros consejos
Algo como esto?
import os
def readList(request):
machine = []
login = []
password = []
for line in open("netrc"): # read netrc file
old = line.strip()
line = line.strip().split()
if old.startswith("machine"): machine.append(line[-1])
if old.startswith("login"): login.append(line[-1])
if old.startswith("password"): password.append(line[-1])
yield connectFtp
def connectFtp(machine, login, password):
for i in range(len(machine)):
try:
ftp = ftplib.FTP(machine[i])
print 'conected to ' + machine[i]
ftp.login(login[i], password[i])
print 'login - ' + login[i] + ' pasword -' + password[i]
except Exception, e:
print e
else:
ftp.cwd("PublicFolder")
print 'PublicFolder'
return (ftp)
def upload(filename, file):
for ftp in readList():
ext = os.path.splitext(file)[1]
if ext in (".txt", ".htm", ".html"):
ftp.storlines("STOR " + filename, open(file))
else:
ftp.storbinary("STOR " + filename, open(file, "rb"), 1024)
print 'success... yra'
upload('test4.txt', r'c:\example2\media\uploads\test4.txt')
Error en la línea 19 algo con try:
Unindent no hace matemáticas cualquier nivel de sangría externa