[Python] вопрос/ответ.

Discussion in 'Python' started by De-visible, 21 Jan 2009.

  1. Vid0k

    Vid0k Elder - Старейшина

    Joined:
    24 Dec 2007
    Messages:
    393
    Likes Received:
    125
    Reputations:
    13
    надо пойти поспать=\
    но все равно не пашет(
     
  2. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    PHP:
    # -*- coding: cp1251 -*-

    import sys,socket

    socket.socket(socket.AF_INETsocket.SOCK_STREAM)
    s.connect(("www.google.ru"80))
    print 
    '+'

    mes   "GET /index.html HTTP/1.1\r\n"\
            
    "Host: www.google.ru\r\n\r\n"

    s.send(mes)
    result s.recv(10240)
    s.close()
    print 
    result
    проверил, все работает!

    з.ы.: если тебе нужна полностью страница, и не нужен header ответа, используй urllib:
    PHP:
    import urllib
    page 
    urllib.urlopen("http://google.ru").read()
    print 
    page
     
  3. Vid0k

    Vid0k Elder - Старейшина

    Joined:
    24 Dec 2007
    Messages:
    393
    Likes Received:
    125
    Reputations:
    13
    спасибо,вот конечный результат забирает всю страницу, а не только первые 1024 байта
    PHP:
     # -*- coding: cp1251 -*-

    import sys,socket

    socket.socket(socket.AF_INETsocket.SOCK_STREAM)
    s.connect(("www.google.ru"80))
    print 
    '+'

    mes  "GET / HTTP/1.1\r\n"
    mes += "Host: www.google.ru\r\n"
    mes += "User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5\r\n"
    mes += "Accept: text/html\r\n"
    mes += "Connection: close\r\n\r\n"

    s.send(mes)
    buff ""
    result ""
    while 1:
        
    buff s.recv(1024)
        if 
    buff:
            
    result += buff
        
    else:
            break
    s.close()
    print 
    result
     
  4. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    Vid0k, в некоторих случаях твой скрипт будет виснуть.

    вот:
    PHP:
        def sendit(sock,packet='',timeout=1):
            
    import time
            
    if (packet!=''):
                
    self.sock.send(packet)
            
    self.sock.setblocking(0)
            
    total_data=[]
            
    data=''
            
    begin=time.time()
            while 
    1:
                if 
    total_data and time.time()-begin>timeout:
                    break
                
    elif time.time()-begin>timeout*2:
                    break
                try:
                    
    data=self.sock.recv(1024)
                    if 
    data:
                        
    total_data.append(data)
                        
    begin=time.time()
                    else:
                        
    time.sleep(0)
                
    except:
                    
    pass
            
    return ''.join(total_data)
    и испозуеш:
    PHP:
    socket.socket(socket.AF_INETsocket.SOCK_STREAM)
    s.connect(("www.google.ru"80)) 
    result sendit(s,"GET / HTTP/1.1\r\nHost: google.ru\r\n\r\n")
    print 
    result
    з.ы.: повторяюсь, но для получения страници лучше использовать уже готовую urllib
     
  5. inlanger

    inlanger Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    985
    Likes Received:
    283
    Reputations:
    27
    Vid0k, с twill твой код будет выглядеть так:

    Это - переход на страницу и вывод полученной страницы на экран(а можно и в переменную)
     
  6. Vid0k

    Vid0k Elder - Старейшина

    Joined:
    24 Dec 2007
    Messages:
    393
    Likes Received:
    125
    Reputations:
    13
    не спасибо...
    я люблю велосипеды...:)
     
  7. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Честно говоря, я не могу понять, зачем нужно было изьебыватся, чтоб получить страницу именно на сокетах, мне интересно, что ты подразумевал под "Активная работа с заголовками" между прочим, модификацию заголовков я делаю через urllib2, я ж написал, что сокеты целесообразно использовать только в одном случае - если необходимо ПОЛУЧИТЬ ЧАСТЬ заголовка.Примером такого изьебоса я могу считать свой сканнер директорий([NDC] 12 BDS), который получает 12 байт из заголовка и обрывает соединение, в этом случае целесообразно было писать его на сокетах (ИМХО). Во всех остальных случаях я не вижу необходимости юзать сокеты на питоне, отлично справляются и стандартные либы. В качестве исключения могу сказать только то, что над server-side приложениями я не трудился и как они будут себя вести при огромных нагрузках я не знаю, с клиентской частью у мну ни разу никаких напрягов не было. Но в пользу server-side приложений говорят Twisted, Django, Plone, Turbo Gears, и т.д.
     
  8. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Просто - это не путь тру кодеров, труъ кодеры настолько суровые, что даже веб-приложения пишут на ассемблере
     
  9. Vid0k

    Vid0k Elder - Старейшина

    Joined:
    24 Dec 2007
    Messages:
    393
    Likes Received:
    125
    Reputations:
    13
    чо ты так напрягся?!:Dрасслабься, ну захотелось мне!)
    нравится тебе твоя урл.либ вот и пиши с ней задоровье
     
  10. Vid0k

    Vid0k Elder - Старейшина

    Joined:
    24 Dec 2007
    Messages:
    393
    Likes Received:
    125
    Reputations:
    13
    а и еще вопрос
    при выводе строки в консоль нужно чтобы она была на месте
    в перле и под виндами работало "\r" но под никсами и в питоне все время переводит на новую строчку(
    как с этим бороться?
    чо придется все время чистить консоль?(
     
  11. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    print stroka.replace("\r", "")
    можно еще и .replace("\n", "") сделать
     
    1 person likes this.
  12. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Наверное, ты пишешь:
    Code:
    print stroka + "\r"
    когда надо
    Code:
    print stroka + "\r"[COLOR=Red],[/COLOR]
     
    1 person likes this.
  13. _Kris_

    _Kris_ Elder - Старейшина

    Joined:
    22 Jul 2008
    Messages:
    53
    Likes Received:
    31
    Reputations:
    5
    Народ если вы не в теме, просьба не отписываться тут...
    Запись с сокетами просто расмешила...
    На что вам кортежи и словари даны?, для чего создавались тонкости питона?
    Также как и login999 уже сказал, urllib используют для этого, вообще сокеты в питоне, для работы на уровне TCP/IP, а для HTTP, FTP и так далее есть готовые либы, и не стоит изобретать херню...
     
    2 people like this.
  14. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    на самом деле тут часто приколы бывает проще) как то сталкивался, но было это на C.
    в общем программу надо запускать из корня, а не из той папки, в которой она лежит. то есть указываем полный путь) ;)
     
  15. Vilz

    Vilz Member

    Joined:
    20 Feb 2009
    Messages:
    14
    Likes Received:
    18
    Reputations:
    0
    Вопрос:Кто что может мне подсказать по поводу цветов текста и шрифтов в программах на питоне.Хочу,например,какую либо фразу сделать в таком же стиле как в программе SmartSIS в главном меню.Знает ли кто про то как представить стандартный текст в питоне в другом виде,т.е. немного его преукрасив?
     
  16. Vid0k

    Vid0k Elder - Старейшина

    Joined:
    24 Dec 2007
    Messages:
    393
    Likes Received:
    125
    Reputations:
    13
    http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
    Code:
    #! /usr/bin/python
    
    print "\033[34mThis is blue\033[0m"
     
  17. Vilz

    Vilz Member

    Joined:
    20 Feb 2009
    Messages:
    14
    Likes Received:
    18
    Reputations:
    0
    Vid0k спасибо
     
  18. M.W.N.N.

    M.W.N.N. Member

    Joined:
    5 Jan 2009
    Messages:
    173
    Likes Received:
    78
    Reputations:
    6
    Народ очень срочно надо, короче встала проблема, я не могу понять как так cделать
    Нужно об]явить массив, записать все это в фаил, и найти сумму квадратов N чисел с конца.
     
  19. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    А зачем запись в файл ?
    Code:
    a=[] # Обьявляем массив 
    b = "abcdef" # Строка с данными , которые будут заноситься в массив
    for element in b: # Для каждого элемента в b
        a.append(element) # Собственно само добавление элемента в массив
    with open ("out.txt", "a") as out:# Тут запись в файл, если захочешь :)
        for element in a :
            out.write(element + "\n")
    with open ("out.txt", "a") as inpt:# Так можно заполнить массив из файла, если файл можно прочитать построчно
        for element in inpt:
            a.append(element[:-1])# Обрати внимание на [:-1]# Это значит, что от каждой строки из файла будет отнят последний символ (обычно это перенос строки, но файл должен заканчиваться пустой строкой !)
    last = a.pop() # Так происходит взятие последнего элемента массива, следовательно для N элементов можно сделать так:
    for x in xrange(N): #для каждого x в диапазоне N(число, обязательно!)
         a.pop(x) #Берем значение из массива c его последующим удалением
        print a # Делаем с a то что хотим
    
    P.S. .pop() Берет значение из массива, а потом его удаляет, т.е. после .pop() этого значения в массиве уже не будет, помни об этом
    P.P.S. Если бы задача была более конкретно описана, то мог бы посоветовать что-то ближе к практике, а так то это чисто фонарный набор - я лично пользуюсь такими конструкциями постоянно, и для этих действий то нужно хоть немного мануал почитать
    P.P.S. а вообще то это элементарная задача =\ За тебя я ее делать не буду
     
    #119 login999, 11 Apr 2009
    Last edited: 11 Apr 2009
    1 person likes this.
  20. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92