jak w temacie
Korzystam z tej biblioteki do laczenia sie i rozsylania na ftp'a
tresci,
w trakcie korzystania z niej pojawily sie male problemy ktorych nie
bardzo wiem
jak rozwiazac moze ktos mial podobne problemy i je rozwiazl, bede
wdzieczny
za pomoc.
w trakcie wysylania zdarza sie ze plik jest przeslany w calosci do
ftp'a
i czeka (nie wiadomo na co)
druga sprawa jest ze mam klika ftp'ow do ktorych za pomoca tej
biblioteki
nie moge sie polaczyc, wyskakuja rozne bledy ze nie moge sie polaczyc
ze login, jest zly, ale kiedy dokladnie z tymi samymi danymi polacze
sie
przez dowolny program ftp'owy to smiga i nie ma problemow, i nie wiem
nawet jak podejsc do tego problemu
(powtarzam ze w obu przypadkach korzystam z tych samych danych,
adres, login, haslo, port, aktywne/pasywne wysylanie)
> Czesc
>
> jak w temacie
> Korzystam z tej biblioteki do laczenia sie i rozsylania na ftp'a
> tresci,
> w trakcie korzystania z niej pojawily sie male problemy ktorych nie
> bardzo wiem
> jak rozwiazac moze ktos mial podobne problemy i je rozwiazl, bede
> wdzieczny
> za pomoc.
[...]
Pozostaje mi tylko rozłożyć ręce.
Bez kodu, który obrazuje problem, bez pełnych zrzutów błędów,
możemy co najwyżej zajrzeć w kryształową kulę, tyle że moja
jest w naprawie. ;)
RW
import ftplib, os, time, sys, inovalbr
from inovalbr import writeraport
#===========================================================
def connect(SERV, USSR, PASS, ch, PORT, ftpdir, LOC):
s = ftplib.FTP()
test = 0
if PORT != '':
try: tmp = s.connect(SERV, PORT) ## polacz sie z
serwerem
except:
test = 1
print "nie polaczylem sie z " + USSR
else:
try: tmp = s.connect(SERV)
except: test = 1
if test == 0:
t = tmp.split()
if tmp.split()[0] == "220": pass
else: writeraport(str(time.ctime()) + " | NIE polaczylem
sie z lokalizacja %s\n" % LOC, ch, ftpdir)
try: tmp = s.login(USSR, PASS) ## zaloguje sie
except: writeraport(str(time.ctime()) + " | Logowanie NIE
zakonczylo sie pomyslnie\n", ch, ftpdir)
if LOC == "010" or LOC == "012" or LOC == '009' or LOC ==
'011' or LOC == '039' or LOC == '033' or LOC == '015':
s.set_pasv(False)
if tmp.split()[0] != "230":
writeraport(str(time.ctime()) + " | Logowanie NIE
zakonczylo sie pomyslnie\n", ch, ftpdir)
return ''
else:
return s
else: return ''
#===========================================================
# dodaje plik sposobem binarnym
def addfile(varia, ch, ftpdir, SERVER, USSR, PASS, PORT, LOC):
if os.path.isfile(varia): ## warunek konieczny
do
c = "STOR %s" % varia ## wyslanie pliku
d = open(varia, 'rb')
chkd = 0
print "Lacze sie z %s\n" % LOC
s = connect(SERVER, USSR, PASS, ch, PORT, ftpdir, LOC)
if s:
size = os.path.getsize(varia)
if len(str(size)) > 6: size = "%f Mb" % (size / 1000000.0)
elif len(str(size)) < 6 and len(str(size)) > 3: size = "%f
Kb" % (size / 1000.0)
print "Rozpoczynam przesylanie pliku %s do ptk. %s - %s\n" %
(varia, LOC, size)
tt1 = time.time()
try:
t = s.storbinary(c, d) ## wyslij binarnie plik
print 'wyslane'
except:
writeraport(str(time.ctime()) + " | Plik %s NIE zostal
przeslany\n" % varia, ch, ftpdir)
t = '0'
print time.strftime("%H:%M:%S", time.gmtime(time.time() -
tt1))
d.close()
if varia[:3] == '999' and t.split()[0] == '226':
s.rename(varia, LOC + varia[3:])
try: s.quit() ## rozlaczenie z
serwerem
except: pass
if t.split()[0] == '226':
print "Plik %s wyslany" % varia
if os.path.exists(os.path.splitext(varia)[0] + '.txt'):
os.remove(os.path.splitext(varia)[0] + '.txt')
return True
else: return False
#===========================================================
# wyszukiwanie i dodawanie na ftp pliku miasta
def findcity(varia, ch, ftpdir):
lista = [{'loc' : '000', 'ip' : '11.111.111.111' , 'log' :
'000' , 'pass' : '000', 'port' : '21'},
{'loc' : '001', 'ip' : '01.001.1.001' , 'log' : '001' ,
'pass' : '001' , 'port' : ''}]
al = []
fileList = []
## petla po katalogach, oprucz ostatniego
for step in range(len(varia) - 1):
## petla po plikach w katalogu varia[step]
for i in os.listdir(varia[step]):
temp = os.path.splitext(i)
## dla pliku textowego stworz wpis do listy
if temp[1] == '.txt': fileList.append({'file' : temp[0]
+ '.wmv', 'zdir' : varia[step]})
## jesli istnieja pliki extra
if len(os.listdir(varia[-1])) > 0:
## dla plikow extra
for step in os.listdir(varia[-1]):
## lista plikow wysylanych do wszystkich
if step[:3] == '999': al.append({'file' : step,
'zdir' : varia[-1]})
else:
## dodaj do listy jesli nie jest plikiem
tymczasowym
if step[0] != '.' or step != 'Thumb.db' or
step[-1] != '~': fileList.append({'file' : step, 'zdir' :
varia[-1]})
fileList.sort()
j = 0
i = 5
## tak dlugo jak sa zadania lub petla przeleci 5 razy
while i > 0:
fList = []
print len(fileList)
print i
name = ''
## dla plikow z listy
for step in fileList:
## jesli katalog istnieje przejdz do niego
if os.path.exists(step['zdir']):
os.chdir(step['zdir']) ## przechodzi do kataloggu 'dir'
## zeruj j gdy di=ojdzie do zmiany miasta
if step['file'][:3] != name: j = 0
j += 1
name = step['file'][:3]
## przeszukuje lokalizacje
for indx in lista:
## szuka namiary na plik
if step['file'][:3] == indx['loc'] and
os.path.exists(step['file']):
## dla nie wyslanego pliku dodaj do nowej
kolejki
if not addfile(step['file'], ch, ftpdir,
indx['ip'], indx['log'], indx['pass'], indx['port'], indx['loc']):
fList.append(step)
## po pierwszym pliku z miasta i dla
istniejacych dodatkowych plikow
if j == 1 and len(al) > 0 and
os.path.exists(al[0]['zdir']):
## po plikach dla wszystkich lokalizacji
for st in al:
os.chdir(st['zdir'])
## dla nie wyslanego pliku dodaj
do nowej kolejki
if not addfile(st['file'], ch,
ftpdir, indx['ip'], indx['log'], indx['pass'], indx['port'],
indx['loc']): fList.append(st)
## nowa lista zadan zmniejszamy liczbe obiegow o 1
del fileList
fileList = fList
i -= 1
time.sleep(900 * i)
#===========================================================
# rozpoczynamy wysylanie pliku
def begin():
t1 = time.time()
ch = "ftp" ## typ potrzebny do
zapisywania
if sys.platform == "win32":
dirr = ["i:\\f\\", "i:\\s\\", "i:\\extra\\"]
ftpdir = "c:\\s\\"
findcity(dirr, ch, ftpdir)
writeraport(str(time.ctime()) + " | Czas przesylania wszystkich
plikow to %s\n\n\n" % str(time.strftime("%H:%M:%S",
time.gmtime(time.time() - t1))), ch, ftpdir)
print "logout"
begin()
[/code]
tak wyglada kod rozsylajacy pliki, co do bledow to podesle nastepnym
razem
moze znajdziecie jakis blad
pozdraviam
p.s.
ostatnio mi taki blad wyskoczyl,
innym powodem zawieszenia sie rozsylania plikow jest, polaczenie z
ftp, wyslanie pliku i po wyslaniu polaczenie jakby zamarza, nie konczy
polaczenia, ani nie wypluwa zadnego komunikatu, wyglada to tak jakby
caly czas wysylal plik,
pytanie a propo ftp, da sie wywalic komunikat z jaka predkosc jest
rozsylany plik??
class position(main):
def __init__(self, varia, ad, SERV, USSR, PASS, PORT, LOC):
main.__init__(self)
self.ad = ad
self.SERV = SERV
self.USSR = USSR
self.PASS = PASS
self.PORT = PORT
self.LOC = LOC
self.varia = varia
self.excpt = []
self.data = []
## polaczeni z playerem
def connect(self):
s = ftplib.FTP()
t = 0
print "Laczes sie z ptk. %s\n" % self.LOC
## laczenia sie z playerm jesli posiada port
if self.PORT:
## pruba polaczenia
try: tmp = s.connect(self.SERV, self.PORT)
except:
self.data.append(str(time.ctime()) + " | Polaczenia z
lokalizacja %s NIE udane\n" % self.LOC)
t = 1
print 'Nie polaczylem sie z %s\n' % self.LOC
## polaczenie sie z plejerem bez portu
else:
## pruba polaczenia
try: tmp = s.connect(self.SERV)
except:
t = 1
self.data.append(str(time.ctime()) + " | Polaczenia z
lokalizacja %s NIE udane\n" % self.LOC)
print 'Nie polaczylem sie z %s\n' % self.LOC
## udane polaczenie
if t == 0:
if tmp.split()[0] != '220':
self.data.append(str(time.ctime()) + " | NIE
polaczylem sie z serverem %s\n" % self.SERV)
print 'Nie polaczylem sie z %s\n' % self.LOC
## proba zalogowania
try: tmp = s.login(self.USSR, self.PASS)
except: self.data.append(str(time.ctime()) + " | Logowanie
NIE zakonczylo sie pomyslnie\n")
## polaczenie aktywne
if self.LOC == '009' or self.LOC == "010" or self.LOC ==
'011' or self.LOC == "012" or self.LOC == '030' or self.LOC ==
'039': s.set_pasv(False) #or LOC == '033' or LOC == '015'
if tmp.split()[0] != '230':
self.data.append(str(time.ctime()) + " | Logowanie NIE
skonczylo sie pomyslnie\n")
return None
else: return s
else: return None
## =========================================================
## przeslanie pliku na ftp'a
def sendfile(self, dirr):
os.chdir(dirr)
c = 'STOR %s' % self.varia
d = open(self.varia, 'rb')
s = self.connect()
t = 0
## jesli nawiazano polaczenie
if s:
size = os.path.getsize(self.varia)
if len(str(size)) > 6: size = "%f Mb" % (size /
1000000.0)
elif len(str(size)) < 6 and len(str(size)) > 3: size =
"%f Kb" % (size / 1000.0)
## proba przeslania pliku
try:
print "Rozpoczynam przesylanie %s - %s\n" %
(self.varia, size)
tmp = s.storbinary(c, d)
print tmp
except: t = 1
if t == 0:
if tmp.split()[0] != '226':
self.data.append(str(time.ctime()), + " | Plik %s NIE
zostal przeslany\n" % self.varia)
print "Plik nie zostal wyslany\n"
## zmiana nazwy pliku dla wszystkich na nr lokalizacji
elif self.varia[:3] == '999':
s.rename(self.varia, "%s%s" % (self.LOC,
self.varia[3:]))
print "wyslany i nazwa zmieniona na %s\n" % self.LOC
d.close()
s.quit()
print "wyslany plik\n"
self.data.append(str(time.ctime()) + " | Polaczenie zostalo
zakonczone\n\n")
## =========================================================
to jest kolejny blad jaki dosc czesto sie pojawia, w trakcie
rozsylania
pozdrawiam
p.s.