Domanda
Può qualcuno aiutarlo.
Perché non funziona
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')`
Quando era insieme stava funzionando. Ma quando ho separato in a funzioni è successo qualcosa, Non riesco a capire cosa.
Soluzione
(A parte i problemi di orribile indentazione, che sono presumibilmente a causa di copia raffazzonata e incollare altrimenti si otterrebbe errori di sintassi il wazoo ...!) ...:
problema Scoping, prima: connectFtp
fa un locali ftp
variabile in modo che le variabili va via non appena ha fatto la funzione. Poi cerca upload
usando la variabile, ma naturalmente non è più lì.
Aggiungi un return ftp
alla fine di connectFtp
, un yield connectFtp
invece di una chiamata pianura al loop in readList
, e utilizzare un ciclo for ftp in readList():
in upload
.
Altri suggerimenti
Una cosa come questa?
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')
Errore alla riga 19 qualcosa con try:
unindent non si matematica qualsiasi livello di rientro esterno