在运行此脚本时,Python的3:无法连接字符串在Python-3
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
import random
import os
import threading
import sys
class bot(threading.Thread):
def __init__(self, net, port, user, nick, start_chan):
self.id= random.randint(0,1000)
self.irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
self.irc_connect (net, port)
self.irc_set_user(user,nick)
self.irc_join(start_chan)
self.finnish=False
threading.Thread.__init__(self)
def run(self):
while not self.finnish:
serv_data_rec = self.irc.recv (4096)
if serv_data_rec.find ("PING") != -1:
self.irc.send("PONG"+ serv_data_rec.split() [ 1 ] + "\r\n")
elif serv_data_rec.find("PRIVMSG")!= -1:
line = serv_data_rec.split("!") [ 0 ] + " :" + serv_data_rec.split(":") [ 2 ]
self.irc_log(line)
self.irc_message(line)
def stop(self):
self.finnish = True
self.irc_quit()
def irc_connect(self, net, port):
self.net = net
self.port = port
self.irc.connect ((net, port))
def irc_set_user(self, user, nick):
self.user = user
self.nick = nick
self.irc.send("NICK " + nick + "\r\n")
self.irc.send("USER " + user + "\r\n")
def irc_join(self, chan):
self.chan = chan
self.irc.send("JOIN " + chan + "\r\n")
def irc_message(self, msg):
self.irc.send("PRIVMSG " + self.chan+" " + msg + " \r\n")
def irc_message_nick(self, msg , nick):
self.irc.send("PRIVMSG " + self.chan+" " + nick + " " + msg + " \r\n")
def irc_ping(self):
self.irc.send("PING :" + self.net)
def irc_log(self, line):
if not os.path.exists("./logs"):
os.makedirs("./logs")
f = open("./logs/" + self.net + self.chan + "#" + "% s" %self.id,'a')
try:
f.write(line)
finally:
f.close()
def irc_quit(self):
self.irc.send("QUIT\r\n")
def irc_quit_msg(self, msg):
self.irc.send("QUIT :" + msg + "\r\n")
def main():
bot_main= bot("irc.freenode.net",6667,"botty botty botty :Python IRC","hello_nick","#martin3333")
bot_main.start()
while 1:
inp = raw_input()
if inp =="!QUIT":
bot_main.stop()
break
sys.exit(0)
if __name__ == '__main__': main()
我得到以下回溯:
File "./hatebozzer.py", line 84, in <module>
if __name__ == '__main__': main()
File "./hatebozzer.py", line 75, in main
bot_main= bot("irc.freenode.net",6667,"botty botty botty :Python IRC","hello_nick","#martin3333")
File "./hatebozzer.py", line 14, in __init__
self.irc_set_user(user,nick)
File "./hatebozzer.py", line 43, in irc_set_user
self.irc.send("NICK " + nick + "\r\n")
TypeError: 'str' does not support the buffer interface
我知道字符串完全地不同的治疗Python 3,但我不想转换字符串或做任何异国情调。 我只想连接它们,所以我在这里错了什么?
这不是连接,'.send()'接收你想要接收的字符串。它只是不喜欢得到一个字符串。 – delnan 2013-05-01 14:57:12
@delnan,但为什么它在Python-2.x中工作呢? – 2013-05-01 14:58:22
请参阅[这个答案](http://stackoverflow.com/a/2411981/264775) - 字符串在Python 3和Python 2之间的处理方式不同。 – thegrinner 2013-05-01 15:01:40