一、subprocess模块 #可以通过传递字符串命令,帮你去实现一些操作系统的命令。
import subprocess res = subprocess.Popen("dir", shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE ) ret = res.stdout.read().decode("gbk") print(ret)
二、struct模块
import struct res = struct.pack("i",6465789) #"q",8个字节 print(res) #b'xfdxa8bx00' print(len(res)) #4 ret = struct.unpack("i",res) print(ret) #(6465789,) print(ret[0]) #6465789
三、ssh模型(黏包)
server
import subprocess import socket import struct server = socket.socket() server.bind(("127.0.0.1",8101)) server.listen(5) while 1: conn,addr = server.accept() while 1: try: server_cmd = conn.recv(1024).decode("utf8") res = subprocess.Popen(server_cmd, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE ) if server_cmd == b"exit": break response1 = res.stdout.read() response2 = res.stderr.read() if response2: pack = struct.pack("i",(len(response2))) conn.send(pack) conn.send(response2) else: pack = struct.pack("i",(len(response1))) conn.send(pack) conn.send(response1) except Exception as e: break conn.close()
client
import socket import struct client = socket.socket() client.connect(("127.0.0.1",8101)) while 1: client_cmd = input("请输入您的命令:") client.send(client_cmd.encode("utf8")) if client_cmd == "exit": break if client_cmd == "": continue pack = client.recv(4) print(pack) data_length = struct.unpack("i",pack)[0] print(data_length) recv_data_length = 0 recv_data = b"" while recv_data_length < data_length: data = client.recv(1024) recv_data_length += len(data) recv_data += data print(recv_data.decode("gbk")) client.close()