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

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

  1. p0is0n

    p0is0n New Member

    Joined:
    8 Jun 2007
    Messages:
    12
    Likes Received:
    2
    Reputations:
    0
    pyc? Это байткод питона, тебе сюда http://docs.python.org/library/dis.html
     
  2. boris_blade

    boris_blade New Member

    Joined:
    28 Sep 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Всем привет.
    Пробую себя в написании аплодера файлов на rghost
    И вот дальше этого кода мысль встала

    Code:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import urllib
    import urllib2
    
    data= {}
    data['authenticity_token'] = 'joCl96XEXhfW2AU54TrblablablaNieWixd7MfUpPgB1nZViA='
    data['file'] = open('/home/user/scripts/toonel.jar')
    url_values = urllib.urlencode(data)
    
    url = 'http://phonon.rghost.ru/files'
    full_url = url + '?' + url_values
    
    headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
    data=urllib2.urlopen(full_url)
    
    thepage = data.read()
    Соответственно скрипт вывод хтмл код сайта, а хотелось бы чтобы выводил линк на загруженный файл.
    Подскажите, пожалуйста, куда дальше копать и что делать.
     
  3. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Наконец-то в соответствующий раздел...
    Ответ очень прост:
    1) Проснифать сессию работы браузера и своего скрипта, и выявить отличия
    2) Понять что Python не формирует multi-part data автоматически, просто по твоему желанию.
    3) Полазить по activestate и найти пример как создавать multi-part
    P.S. когда-то делал подобное, тогда замучился конкретно...
    Ссылочка на activestate :http://code.activestate.com/recipes/146306/
     
  4. boris_blade

    boris_blade New Member

    Joined:
    28 Sep 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    а чем поснифать можно?
     
  5. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    wireshark - кроссплатформенно
    httpanalyzer - под винду
     
    1 person likes this.
  6. oRb

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

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    582
    Reputations:
    256
    Code:
    count(...)
        S.count(sub[, start[, end]]) -> int
        
        Return the number of non-overlapping occurrences of substring sub in
        string S[start:end].  Optional arguments start and end are interpreted
        as in slice notation.
    "This is the string".count('is')
     
    2 people like this.
  7. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Насчет повторов - рекомендою взглянуть на модуль collections, на класс Counter, советую поглядеть, авось лучше будет.
    ===========================================================
    А теперь пост для тех, кто как и я думает, переезжать ли на Python 3.1 или оставаться на 2.6.2, ответ : однозначно НУ ЕГО НА ХУЙ PYTHON 3.1. Я прошу прощения за неадекватность предыдущего предложения, но после нескольких месяцев юзания Python3.1 могу сказать что щас обратно возвращаюсь на 2.6 бажность убивает.
    Последним подтверждением был сегодняшний тестовый запуск скрипта с гуем на ттк, это пиздец просто, слов нету. Умолчу о каких-то непонятках с конфигпарсером и кириллицей, мать их. Скрипт под линем запустился 3/3 , под виндой 5/5 Но вот под виндой ни разу нормально не отработал, висняки либо в начале работы, либо в конце (болезненно они реагируют на messagebox). Короче советую задуматься над этим, я лично был искушен красивым ttk под Python3.1
     
    2 people like this.
  8. boris_blade

    boris_blade New Member

    Joined:
    28 Sep 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Кстати я тоже пробовал перейти на 3.1, но с ним у меня отказались alsa-lib
    компилироваться.Откатился обратно на 2.6.2
     
  9. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Я сижу под бубунтой, таких проблем не возникало, 3.1 собирал как из исходников, так и качал из репов 3.01 а потом уже собирал 3.1 (пытался таким образом решить проблему с зависимостями), собиралось и работало без проблем.
    Зато вот под Slackware (а точнее ,VectorLinux) был трабл (скорее всего рожден малым опытом и слабыми познаниями в *NIX) - 3.1 заменил собой 2.6, последствия были убойными
     
  10. H1Z

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

    Joined:
    23 Mar 2007
    Messages:
    103
    Likes Received:
    61
    Reputations:
    6
    Доброго дня всем присутствующим!
    У меня проблема с библиотекой PIL (Python Image Library). Мне требуется создать изображение из данных полученных с сервера. Сейчас использую костыль: создаю файл, после пишу в него данные с сервера, после с помощью "Image.open("2.jpg")" получаю эту самую картинку. Так что вопрос в том как создать картинку без сохранения в файл, т.е. чтобы выглядело примерно так: Image.raw(data).
     
  11. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Короч, с PIL не работал, рекомендую посмотреть в сторону StringIO (дает файловый интерфейс к строке и т.д.)
     
    2 people like this.
  12. n3m0

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

    Joined:
    11 May 2007
    Messages:
    133
    Likes Received:
    92
    Reputations:
    11
    Например в буфер загрузить?
    Code:
    import urllib2, StringIO, Image
    
    ## загружаем картинку в переменную
    stream = urllib2.urlopen('http://images.domain.com/atacks.gif')
    
    ## помещаем картинку в буфер
    buffer = StringIO.StringIO(stream.read())
    
    ## im - объект-картинка
    im = Image.open(buffer)
    
    
     
    1 person likes this.
  13. H1Z

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

    Joined:
    23 Mar 2007
    Messages:
    103
    Likes Received:
    61
    Reputations:
    6
    Code:
    import urllib2, StringIO, Image
    stream = urllib2.urlopen('http://images.domain.com/atacks.gif')
    buffer = StringIO.StringIO(stream.read())
    im = Image.open(buffer)
    
    Оно самое ;)
     
  14. E-AL

    E-AL Elder - Старейшина

    Joined:
    3 Oct 2007
    Messages:
    36
    Likes Received:
    22
    Reputations:
    0
    rushter
    глобальные имена должны объявляться, если им будут присваиваться значения внутри функции...
    def ret():
    global num
    num = 0
    return num+1

    вот это уже работает.. и еще лучше не называть модуль зарезервированным словом, ибо мы получаем ошибку при from def import * (хотя, если это просто сокращенный пример, то все ок).
     
  15. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Честно говря, никогда не встречал таких конструкций, если бы мне нужно было в какой -нибудь моей функции в составе какого либо модуля получить достпу к какой-либо переменной то я делал бы приблизительно так :
    Code:
    class def_:
        def __init__(self):
            self.num = 0
        def ret(self):
            return self.num
    
    а потом уже делал бы как-то так :
    Code:
    import config
    import def #это если ты все таки решишь назвать его def.py, а класс def_ положишь в него
    def_ = def.def_()
    def_.num = config.num
    
    Конструкция ненамного сложнее, зато позволяет избавиться от некошерного global.
    P.S. Исходя из имен файла, то я бы посоветовал поглядеть в сторону ConfigParser ....
     
    #335 login999, 1 Oct 2009
    Last edited: 1 Oct 2009
    2 people like this.
  16. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Ладно, можно сделать и наоборот
    Code:
    class def_:
        def __init__(self):
            self.config = None
        def ret(self):
            return self.config.num
    
    Вызов потом сделать так :
    Code:
    import config
    import def #это если ты все таки решишь назвать его def.py, а класс def_ положишь в него
    def_ = def.def_()
    def_.config = config
    print def_.ret()
    
    Просто немного поопираться на то что это обьекты, да и все станет попроще.
    Либо на крайняк можно реализовать взаимодействие классов через какие-либо свои приколы, если честно, то просто нужно глянуть код и посмотреть, чего там можно переделать. Модульность то предполагает собой классы как таковые , просто дай второму классу хэндлер на первый, и пущай он там себе обрабатывает его
     
  17. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Можно код в ПМ ?
    Просто как я показал, то я таким образом сам увязываю, когда начинаю косить под ООП и у мну получается несколько standalone классов, проблем в принципе никогда не было...
    P.S. Подозреваю, что ты неправильно его привязал.
    P.P.S. Если у тебя есть аттрибут keys это вообще очень некошерно.
     
    #337 login999, 1 Oct 2009
    Last edited: 1 Oct 2009
  18. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Code:
    import os
    import sys
    
    level_down_dir = u"configs"
    
    dir_path = os.getcwdu()+os.sep+level_down_dir+os.sep
    dir_path = current_dir.encode(sys.getfilesystemencoding())
    sys.path.append(dir_path)
    
    А дальше пох..

    Или, как вариант можно юзать __import__(), но я точно не помню как он работает
     
    2 people like this.
  19. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    str.replace(old, new[, count])
     
  20. ZirroCool

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

    Joined:
    16 Sep 2006
    Messages:
    128
    Likes Received:
    55
    Reputations:
    20
    К примеру, можно в начале тела скрипта узнать текущее время, а в конце скрипта вычесть из текуего времени, время которое ты узнал в начале скрипта и получить время работы скрипта! Во как завернул!
     
    1 person likes this.