立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu

1.服务器端:接收客户端发送的命令,subprocess.POPE()函数可用于产生一个子进程,并且返回子进程的结果

import socket
import subprocessphone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(('127.0.0.1',8080))
phone.listen(5)
while True:#1)接收客户端发送过来的命令res = phone.accept()conn,client_addr = reswhile True:try:cmd = conn.recv(1024)#2)处理命令,执行命令并且获得命令得到的结果obj = subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,#将正确运行命令得到的结果传给管道stdout中stderr=subprocess.PIPE)#将没有正确运行命令得到的返回信息存放在stderr管道中stdout = obj.stdout.read()stderr = obj.stderr.read()data = stdout + stderr#3)将结果进行发送给客户端conn.send(data)except ConnectionResetError:breakconn.close()
phone.close()

2.客户端:向服务器端发送一个命令,并且获取由服务器执行命令后的结果,并且打印出来,主要知识点:subprocess/Popen/stdout=subprocess.PIPE/stderr=subprocess.PIPE

import socket
#1、设置phone套接字
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2、连接服务器(打电话),本地地址:127.0.0.1
phone.connect(('127.0.0.1',8080))
#3、向服务器发送请求send(),发送的数据不能直接发送字符串,因为要传送到物理层底层,因此需要转换成二进制的bytes类型进行发送,只需:发送的数据.encode('utf-8')即可
while True:'''实现在客户端输入一个命令,然后命令发送给服务器端,服务器端进行命令的执行,然后再服务器端执行的命令的结果返回给客户端'''#1)、向服务器端发送命令cmd = input("请输入命名:")#修复客户端发送空字符串而服务器卡在接收信息处的bug,continue表示跳出本次循环,重新开始下一次的循环if not cmd:continuephone.send(cmd.encode('utf-8'))#2)、接收服务器端执行命令后的结果res = phone.recv(1024)#接收小于1024bytes的数据print('服务器返回来的数据:',res.decode('gbk'))#5、关闭套接字phone
phone.close()

3.注:客户端发送给服务器的数据必须是bytes类型,使用encode('utf-8'),客户端接收到的数据也是bytes类型,如果需要在客户端打印出接收到服务器的bytes类型数据,那就需要解码,window系统默认的解码方式‘gbk’,Linux系统默认的解码方式是“utf-8”,需要打印则用语句:

#data是客户端接收到的由服务器传回来的bytes类型数据,此处是windows系统,默认的解码方式是gbkprint(data.decode('gbk'))

4.补充:windows命令

1)dir:返回子文件名和子文件夹名

2)ipconfig:返回本地网关ip地址

3)tasklist:返回正在运行的进程的相关信息

5.上述程序运行的结果,下面的结果出现了粘包现象,具体粘包的含义以及出现的原因和结果方法见下一篇学习笔记

请输入命名:dir /
服务器返回来的数据: 无效开关 - ""。请输入命名:dir
服务器返回来的数据:  驱动器 C 中的卷是 本地磁盘卷的序列号是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket编程\模拟ssh远程操作命令 的目录2020/03/07  14:01    <DIR>          .
2020/03/07  14:01    <DIR>          ..
2020/03/07  13:35                 0 __init__.py
2020/03/07  10:02               895 客户端_.py
2020/03/07  14:01             1,055 服务器端_.py3 个文件          1,950 字节2 个目录 125,989,347,328 可用字节请输入命名:dir e
服务器返回来的数据:  驱动器 C 中的卷是 本地磁盘卷的序列号是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket编程\模拟ssh远程操作命令 的目录找不到文件请输入命名:dir /e
服务器返回来的数据: 无效开关 - "e"。请输入命名:tasklist
服务器返回来的数据:
映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0          4 K
System                           4 Services                   0        584 K
smss.exe                       324 Services                   0        804 K
csrss.exe                      524 Services                   0      9,040 K
csrss.exe                      620 Console                    1     30,284 K
wininit.exe                    628 Services                   0      4,144 K
winlogon.exe                   656 Console                    1      6,512 K
services.exe                   724 Services                   0      8,284 K
lsass.exe                      732 Services                   0     11,456 K
svchost.exe                    804 Services                   0     11,364 K
svchost.exe                    844 Services                   0      8,864 K
dwm.exe
请输入命名:ipconfig
服务器返回来的数据:                        948 Console                    1     24,472 K
nvvsvc.exe                     956 Services                   0          4 K
nvxdsync.exe                  1000 Console                    1        824 K
nvvsvc.exe                    1008 Console                    1        200 K
svchost.exe                    276 Services                   0     30,968 K
svchost.exe                    392 Services                   0     43,000 K
svchost.exe                    412 Services                   0     24,864 K
svchost.exe                    736 Services                   0     49,704 K
RtkAudioService64.exe         1056 Services                   0          4 K
RAVBg64.exe                   1076 Console                    1        352 K
RAVBg64.exe                   1084 Console                    1        344 K
ZhuDongFangYu.exe             1128 Services                   0      3,320 K
svchost.exe                   1280 Services                   0     16,404 K
spoolsv.exe

学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现相关推荐

  1. 学习笔记(10):Python网络编程并发编程-粘包现象

    立即学习:https://edu.csdn.net/course/play/24458/296240?utm_source=blogtoedu 粘包现象:服务器接收到客户端的命令后,进行执行得到结果后 ...

  2. 学习笔记(19):Python网络编程并发编程-互斥锁

    立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...

  3. 学习笔记(34):Python网络编程并发编程-异步调用与回调机制

    立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu 1.知识点:(详细见代码注释) 1)同步调用: res1 ...

  4. 学习笔记(33):Python网络编程并发编程-进程池线程池

    立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...

  5. 学习笔记(28):Python网络编程并发编程-死锁与递归锁

    立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...

  6. 学习笔记(18):Python网络编程并发编程-守护进程

    立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...

  7. 学习笔记(12):Python网络编程并发编程-解决粘包问题-简单版本

    立即学习:https://edu.csdn.net/course/play/24458/296243?utm_source=blogtoedu 粘包现象的解决:简单版 1.思路:       在服务器 ...

  8. 学习笔记(14):Python网络编程并发编程-文件传输功能实现

    立即学习:https://edu.csdn.net/course/play/24458/296245?utm_source=blogtoedu 1.课程目的: 实现客户端输入下载文件的命令,然后将命令 ...

  9. 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务

    立即学习:https://edu.csdn.net/course/play/24458/296237?utm_source=blogtoedu 链接循环,一个服务器服务多个客户端, 思路1:服务器一个 ...

最新文章

  1. hive脚本执行方式
  2. 用碧海潮声制作的宋体(雅黑宋体)替换Windows7原生的火柴棍式的宋体
  3. 【Github】怎么在README.md中添加图片?
  4. 数据治理与元模型_开放项目的治理模型如何演变
  5. 北京网信金服PHP薪资_【企航金服工资|企航金服待遇怎么样】-看准网
  6. Rhino基础教程---四管混接、五管混接
  7. 记一次使用Openssl生成p12证书搭建https证书
  8. {@link}注解的使用 -------代码注释
  9. 大学生html5实训报告,大学生实训心得体会范文(精选5篇)
  10. Echarts 柱状图调整 y 轴单位标题与图表之间的距离
  11. 如何回复SCI审稿人评审意见(response letter)
  12. 虚拟机做dcs服务器,虚拟机技术的DCS仿真 - 机械设计 - 电子发烧友网
  13. 学shell和python哪个难_shell与python的优劣对比到底用哪个
  14. 火狐(FireFox)黑客常用插件
  15. opencv鱼眼镜头矫正
  16. 信息熵与信息增益的概念
  17. 从头开始敲代码之《从BaseApplication/Activity开始(五)》(自定义控件,实现点击/滑动翻页)
  18. 量子态操作:基于门的三态旋转
  19. 北京地铁站经纬度集合(包含大部分)
  20. 透过日播放量超过6亿的《延禧攻略》,看2018视频网站格局

热门文章

  1. [置顶] 程序员编程生产力相差10倍意味着什么?
  2. SilverLight开发系列第1步:搭建开发环境
  3. 使用javasript 遍历页面CheckBox
  4. Java 类型转换String,List,Map,Array
  5. python---线程与进程
  6. ubuntu上安装docker
  7. InfluxDB学习之InfluxDB的基本操作
  8. 04.openssl编程——哈希表
  9. Linux 中断处理浅析
  10. C# 微支付退款申请接口 V3.3.6