[code]
#! /usr/bin/python
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.