New То? Code: from ftplib import FTP from sys import exit, stdout from time import time from random import choice from os import remove FTPHOST = "127.0.0.1" FTPUSER = "username" FTPPASSWD = "password" SIZE = 100 # in MB def createFile(size): kb_buffer = "w" s = "abcdefghijklmnopqrstuvwxyz1234567890" for i in range(1024): kb_buffer += "w" filename = "".join([ choice(s) for i in range(8) ]) + ".txt" x = open(filename, "w") for i in range(size * 1024): x.write(kb_buffer) x.close() return filename def getFileName(ftp, filename, outfile=None): if outfile is None: outfile = stdout ftp.retrlines("RETR " + filename, lambda s, w=outfile.write: w(s + "\n")) def main(): print ("[+] Connecting to " + FTPHOST + "..") try: ftp = FTP(FTPHOST) print ("[+] Connection established") except: print ("[-] Error while connecting") ftp.quit() exit(0) print ("[+] Logging in..") try: ftp.login(FTPUSER, FTPPASSWD) print ("[+] Successfully logged in") except: print ("[-] Not logged in") ftp.quit() exit(0) print ("[+] Sending File..") filename = createFile(SIZE) try: f = open(filename, "rb") begin_transfer = time() ftp.storlines("STOR " + filename, f) end_transfer = time() f.close() print ("[+] File successfully sent") UploadTime = end_transfer - begin_transfer print ("[+] File sending took " + str(UploadTime)[:4] + " Seconds") except: print ("[-] Error while sending") ftp.quit() f.close() exit(0) print ("[+] Receiving File..") remove(filename) try: f = open(filename, "w") begin_transfer = time() getFileName(ftp, filename, f) end_transfer = time() print ("[+] File successfully received") DownloadTime = end_transfer - begin_transfer print ("[+] File receive took " + str(DownloadTime)[:4] + " Seconds") except: print ("[-] Error while receiving") ftp.quit() f.close() exit(0) UL_Speed = (SIZE * 1024) / UploadTime DL_Speed = (SIZE * 1024) / DownloadTime print () print ("Upload Speed: " + str(UL_Speed)[:4] + " kB/s") print ("Download speed: " + str(DL_Speed)[:4] + " kB/s") if __name__ == "__main__": main()
Вот знал, что кто-нибудь да скажет это Собственно вопрос отпадает ввиду возможности парсинга заголовка Content-Length ответа. А лучше даже циклом получать данные пока не будет достигнут конец.
0xJah Рад, что не разочаровал, но не переносите привычку выработанную в си/дельфи в питон, плохо это если сервер отправляет данные чанками - заголовка не будет, и там свои особенности Все бы хорошо, если все веб-серверы подчинялись заголовку Connection: Close - Может случиться ситуация, что поток/программа будут зависать, пока не выскочит исключение таймаута.
Да это не привычка Я уже написал то, что мне нужно с использованием urllib, но при тестировании программы были обнаружены ошибки и было принято решение, что легче будет всё это дело переписать с использованием сокетов, нежели заточить под urllib. Кхм... Наверно в моей ситуации так и есть, хотя я не уверен. Если смотрю ответ с помощью firebug, то там этот заголовок есть, но если же обращаюсь из скрипта, то в ответе этого заголовка не наблюдаю. Только что задействовал цикл в получении полного ответа, собственно так и получилось. Всё на время подвисает. Но всё же должен быть нормальный вариант для решения моей задачи без использования urllib.
наверное, супер-тупой вопрос, но почему-то не получается. насколько я понял, чтобы русский текст работал, нужно делать так: Code: # -*- coding:<utf-8> -*- print "ащащащ"; выдает: Code: SyntaxError: Non-ASCII character '\xd0' как это правильно сделать? Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) [GCC 4.4.5] on linux2, netbeans 6.9.1 upd: если из терминала, всё ок,
Я создаю сокет irc0 = socket.socket( socket.AF_INET, socket.SOCK_STREAM,0) Затем ним же соединяюсь серваком Ну и принимаю данные Затем повторяю все это с другим сокетом irc1 = socket.socket( socket.AF_INET, socket.SOCK_STREAM,0) Почему сокет кидает ошибки вроди пермишн дениед? Тобиш нормально принимать данные с 2 серверов невыходит, они либо идут вместе либо вобще неприходят
Megido код или полный текст ошибки в студию. Тут все работает: Code: import socket irc1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) irc1.connect(('ya.ru', 80)) irc1.send('''GET / HTTP/1.1\r\nHost: ya.ru\r\nConnection: Close\r\n\r\n''') print irc1.recv(8192) irc1.close() irc2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) irc2.connect(('ya.ru', 80)) irc2.send('''GET / HTTP/1.1\r\nHost: ya.ru\r\nConnection: Close\r\n\r\n''') print irc2.recv(8192) irc2.close()
Не отослал принял а постоянно принимая данные, так как ты написал работать будет. Но только первое сообщение
data=string.split(unicode(vars.irc0.recv(4096)),'\r\n') File "e:/resource/socket.py", line 353, in recv socket.error: (13, 'Permission denied')
Megido как вы подключаетесь к серверу, что у вас происходит с этим сокетом от момента создания, до этой ошибки? Возможно вы, по неизвестной мне причине, пытаетесь биндить один и тот же локальный порт?
Скажите пожалуйста - мне задали такое задание: надо на питоне вичеслить сколько комбинаций можно сделать с монет номиналом 1 2 5 25 и 50 коп, чтобы в суме получилось 100 коп, тоесть гривна (или рубль =) ). Пробывал делать это разными способами и ничего не получилось. Чтобы вы не думали, что я ищу готовое решение я покажу что я что то уже пробывал, но я только начал изучать этот язык: Code: a=1 t=2 c=5 d=25 e=50 suma=100 plusb=0 plusc=0 plusd=0 pluse=0 x=0 def parametry(num): if(num==t): x=t plusb = 1 plusc = 0 plusd = 0 pluse = 0 if(num==c): plusb = 0 plusc = 1 plusd = 0 pluse = 0 if(num==d): plusb = 0 plusc = 0 plusd = 1 pluse = 0 if(num==e): plusb = 0 plusc = 0 plusd = 0 pluse = 1 return plusb,plusc,plusd,pluse,x k_mas=['1111','1110','1101','1100','1011','1010','1001','1000','0111','0110','0101','0100','0011','0010','0001'] def break_mas(k_mas,maska,plusb,plusc,plusd,pluse,x): b=1 total=0 for i in k_mas[maska]: if b==1: i1=int(i) elif b==2: i2=int(i) elif b==3: i3=int(i) else: i4=int(i) b+=1 count=1 countb=1 countc=1 countd=1 counte=1 if i1==1: b1=t else: b1=0 if i2==1: c1=c else: c1=0 if i3==1: d1=d else: d1=0 if i4==1: e1=e else: e1=0 while (suma-b1*countb-c1*countc-d1*countd-e1*counte)>=0: if (x==t)and(b1==0): return #print(suma-b1*countb-c1*countc-d1*countd-e1*counte) result=suma-b1*countb-c1*countc-d1*countd-e1*counte countb+=plusb countc+=plusc countd+=plusd counte+=pluse count+=1 total+=count return total n=0 total_change=0 while n<=7: pl=parametry(t) total_change+=break_mas(k_mas,n,pl[0],pl[1],pl[2],pl[3],pl[4]) n+=1 print(total_change) Здесь я пробывал использовать маски (15 штук), но как только маска начинаеться на 0, сразу выдает ошибку. Возможно я не в том направлении ищу или что то не то делаю? Подскажите пожалуйста как правильно... Буду очень благодарен! Если всё получится, тому кто найболее помог с меня "+"!!! Спасибо всем зарание!
Писал быстро, для оптимизации открытый лес, но всё же можно посмотреть какие есть возможности реализации вашей проблемы. Тестил для MAX=20, ибо для 100 ну уж очень много комбинаций. Code: A = 1 B = 2 C = 5 D = 25 E = 50 MIN = 0 MAX = 10 RESULT = 0 value1 = MIN value2 = MIN value3 = MIN value4 = MIN value5 = MIN print("[+] Initializing...") while value5 <= MAX: if (value1 * A + value2 * B + value3 * C + value4 * D + value5 * E == MAX) : RESULT += 1 print("+1 combination") f = open("combinations.txt", "a") result2txt = str(A) + " (" + str(value1) + ") + " + str(B) + " (" + str(value2) + ") + " + str(C) + " (" + str(value3) + ") + " + str(D) + " (" + str(value4) + ") + " + str(E) + " (" + str(value5) + ")" + "\n" f.write(result2txt) f.close() value1 += 1 if value1 > MAX // A: value1 = 0 value2 += 1 if value2 > MAX // B: value2 = 0 value3 += 1 if value3 > MAX // C: value3 = 0 value4 += 1 if value4 > MAX // C: value4 = 0 value5 += 1 if value5 > MAX // E: break else: value1 += 1 if value1 > MAX // A: value1 = 0 value2 += 1 if value2 > MAX // B: value2 = 0 value3 += 1 if value3 > MAX // C: value3 = 0 value4 += 1 if value4 > MAX // D: value4 = 0 value5 += 1 if value5 > MAX // E: break print("Es gibt insgesamt " + str(RESULT) + " Möglichkeiten") Результат таков: Code: [+] Initializing... +1 combination +1 combination +1 combination +1 combination +1 combination +1 combination +1 combination +1 combination +1 combination +1 combination Es gibt insgesamt 10 Möglichkeiten Code: 1 (10) + 2 (0) + 5 (0) + 25 (0) + 50 (0) 1 (8) + 2 (1) + 5 (0) + 25 (0) + 50 (0) 1 (6) + 2 (2) + 5 (0) + 25 (0) + 50 (0) 1 (4) + 2 (3) + 5 (0) + 25 (0) + 50 (0) 1 (2) + 2 (4) + 5 (0) + 25 (0) + 50 (0) 1 (0) + 2 (5) + 5 (0) + 25 (0) + 50 (0) 1 (5) + 2 (0) + 5 (1) + 25 (0) + 50 (0) 1 (3) + 2 (1) + 5 (1) + 25 (0) + 50 (0) 1 (1) + 2 (2) + 5 (1) + 25 (0) + 50 (0) 1 (0) + 2 (0) + 5 (2) + 25 (0) + 50 (0) P.S. Изменен алгоритм на более точный.
Хорошая идея, немного оптимизировал и получилось примерно 1200 вариантов! Правда не знаю правильно ли это))) ну как я и обещал с меня награда! Спасибо большое за помощь!