102 模拟ssh远程执行命令
目录
一、subprocess模块subprocess 模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。更多查看官网:https://docs.python.org/2/library/subprocess.html?highlight=subprocess#frequently-used-arguments 可以通过subprocess 模块去执行命令 1.1 使用方法执行命令,把执行的正确结果放到管道中,把执行错误的结果也放到管道中
注意:的结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码,正所谓用什么格式编码就用什么格式解码 # subprocess 执行系统命令的模块 import subprocess # 把执行的正确结果放到管道中 obj=subprocess.Popen('tasklist',stderr=subprocess.PIPE) #拿到正确结果的管道,读出里面的内容 ss=obj.stdout.read() err=obj.stderr.read() print('错误信息',str(err,encoding='gbk')) #因为windows用的gbk编码,用gbk解码 print(str(ss,encoding='gbk')) 二、模拟实现SSH远程执行命令服务器import socket import subprocess HOST = "192.168.11.237" PORT = 8081 soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM) soc.bind((HOST,PORT)) soc.listen(5) while 1: print("等待连接。。。") conn,addr = soc.accept() print("连接成功。。。n") while 1: try: data = conn.recv(1024) if len(data)==0: # 长度0说明断开了连接。在windows中没用,在linux中才有用 break # 把执行正确的内容放到管道中 obj = subprocess.Popen(str(data,encoding="utf8"),stderr=subprocess.PIPE) # 执行的结果 b 格式,gbk编码(windows平台) suc_msg = obj.stdout.read() if suc_msg: conn.send(suc_msg) else: fail_msg = obj.stderr.read() conn.send(fail_msg) except: print("客户机连接中断。。。") break conn.close() soc.close() 客户端import socket HOST = "192.168.11.237" PORT = 8081 soc = socket.socket() soc.connect((HOST,PORT)) while 1: cmd = input("请输入需要执行的命令") soc.send(cmd.encode("utf8")) data = soc.recv(1024) print(data.decode("gbk")) 输入 输入 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |