1 import socket
2 import struct
3 import subprocess
4
5 sk = socket.socket()
6 sk.connect(("127.0.0.1", 8080))
7 while True:
8 cmd = sk.recv(1024).decode("gbk")
9 # Windows命令行是gbk编码,使用gbk解码
10 if cmd == "q":
11 break
12 res = subprocess.Popen(cmd,shell=True,
13 stdout=subprocess.PIPE,
14 stderr=subprocess.PIPE)
15 # 使用subprocess模块执行cmd命令
16 # 第一个参数是要执行的命令
17 # shell=True 表示执行的是系统shell命令
18 # stdout 执行成功输出信息,保存到管道
19 # stderr 执行失败输出信息,保存到管道
20 stdout = res.stdout.read()
21 # 读取执行成功信息
22 stderr = res.stderr.read()
23 # 读取执行失败信息
24 str_len = len(stdout)+len(stderr)
25 # 取执行成功和失败信息的长度和
26 num = struct.pack("i",str_len)
27 # 使用struct进行数字固定长度编码
28 # “i” 表示进行转换的是int类型 -> 转换完成后会是固定4字节的bytes类型
29 # 第二个参数是长度数字
30 sk.send(num)
31 # 将长度发送
32 sk.send(stdout)
33 # 发送执行成功信息
34 sk.send(stderr)
35 # 发送执行失败信息
36
37 sk.close()