模拟ssh远程执行命令
即使用pycharm运行cmd命令,返回相应的结果
服务端
import socket
import subprocess
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',8080))
server.listen(5)
print('start...')
while True:
conn,client_addr=server.accept()
while True:
print('from client:',client_addr)
cmd=conn.recv(1024)
if len(cmd)==0:break
print('cmd',cmd)
obj=subprocess.Popen(cmd.decode('utf8'),#输如cmd命令
shell=True, #通过shell运行
stderr=subprocess.PIPE, #把错误输出放入管道以便打印
stdout=subprocess.PIPE#将正确结果放入管道以便打印
)
stdout=obj.stdout.read()
stderr=obj.stderr.read()
conn.send(stdout)
conn.send(stderr)#要么正确信息要么错误信息,两个输出只会发送一个
conn.close()
server.close()
客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
while True:
data = input('please enter your data')
client.send(data.encode('utf8'))
data = client.recv(1024).decode('gbk')
print('from server:', data)
client.close()
需要注意的是windows默认编码为gbk,所以在客户端解码的时候需要使用gbk编码进行解码