Питон нужна помощь

Discussion in 'PHP' started by ^NSA^, 23 Jul 2012.

  1. ^NSA^

    ^NSA^ Elder - Старейшина

    Joined:
    3 Jul 2012
    Messages:
    64
    Likes Received:
    29
    Reputations:
    32
    2 версии все работает ок

    Code:
    
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,host,pport)
    socket.socket = socks.socksocket
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    sock.connect((target, port))
    sock.send(Msg)
    print("Bot start join to server")
    
    sock.send("USER B irc.freenode.org blqq :Dorx\r\n")
    
    
    sock.send("JOIN {0}\r\n".format(chanel))

    ток же код в верc 3 Питона уже проблема

    Code:
    sock.send(b"JOIN {0}\r\n".format(chanel))

    проблема что 3 верс b"sample string" идет байт строка

    как мне туда вставить название канала.
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ^NSA^ элегантного решения для двух байт-строк с помощью формата - увы не существует. В качестве возможных альтернатив,

    1) добавление к сокету метода отправляющего строковые данные. Минусы - нужно следить кодировкой, не получится отправлять бинарные данные
    Code:
    def send_string(self, data, flags=None):
        return self.send(data.encode('utf-8', flags))
    
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,host  ,pport)
    socket.socket = socks.socksocket
    socket.socket.send_string = send_string
    
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    sock.connect((target, port))
    sock.send(Msg)
    print("Bot start join to server")
    
    sock.send_string("USER B irc.freenode.org blqq :Dorx\r\n")
    
    
    sock.send_string("JOIN {0}\r\n".format(chanel))
    2) Использование оператора конкатенации и кодирование str строк вручную. Универсально, но некрасиво и неудобно.

    3) Кодировать по месту. Неуниверсально, только что полученные данные надо декодировать предварительно, не нужно делать monkey-patching, проблемы с кодировкой
    Code:
    channel = 'blabla'
    sock.send("JOIN {0}\r\n".format(chanel).encode('utf-8'))
    4) Написать собственную реализацию format для byte-строк
     
    _________________________