我有一个脚本在 python2 脚本中使用模块套接字。 我想将它升级为 python3 脚本。
搜索Python3和Python2的区别-socket.send data和Python socket.send encoding后,我没有成功升级到python3。
类似的帖子 TypeError: a bytes-like object is required, not 'str' 描述了方法
sendto
似乎在 python3 中工作,但我没有这个例子的端口...
这里是连接方法:
def connect(self):
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sys.stderr.write("Waiting for connect to %s\n" % (self.uds_filename,))
while 1:
try:
sock.connect(self.uds_filename)
except socket.error as e:
if e.errno == errno.ECONNREFUSED:
time.sleep(0.1)
continue
sys.stderr.write("Unable to connect socket %s [%d,%s]\n"
% (self.uds_filename, e.errno,
errno.errorcode[e.errno]))
sys.exit(-1)
break
print("CONNECTED")
self.webhook_socket = sock
这是发送方法:
def send(self, message):
self.webhook_socket.send("%s\x03" % (message)) # message is type 'str'
问题是:如何正确翻译。它被发送到 Klipper 服务(3D 打印),我不想改变服务器端,只有客户端(这两种方法)到 python3。
此工作脚本可在https://github.com/Klipper3d/klipper/blob/master/scripts/whconsole.py
因为此脚本与特定硬件(3D 打印机)交互,所以我将测试您的答案。我通过测试 python3 的解决方案遇到的问题是没有任何错误的答案......