模拟ssh功能和subprocess模块

模拟ssh功能和subprocess模块

ssh---》远程执行命令

subprocess---》执行系统命令的模块

一、subprocess模块

import subprocess
# 执行系统dir命令(查看当前目录下有哪些文件),把执行的正确结果放到管道中
obj = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# stdout是正确信息,stderr是错误信息
# 拿到结果的管道,读出里面的内容
ss = obj.stdout.read()  # 读正确信息
err = obj.stderr.read()  # 读错误信息
print('错误信息>>>',str(err,encoding='gbk'))  # 打印错误信息,因为windows用的gbk编码,所以用gbk解码
print('正确信息>>>',str(ss,encoding='gbk'))  # 打印正确信息

二、模拟ssh功能的客户端和服务端

2.1 模拟ssh功能的客户端

import socket
soc = socket.socket() # 不传参默认是tcp协议
soc.connect(('127.0.0.1',8005))
while True:  # 通信循环
    in_s = input('请输入要执行的命令>>>').strip()
    soc.send(in_s.encode('utf8'))  # 转换成bytes格式发送
    data = soc.recv(1024)  # 接收数据
    print(str(data,encoding='gbk')) # 打印接收的数据

请输入要执行的命令>>>dir
驱动器 E 中的卷是 软件下载安装
卷的序列号是 E6E3-32EF

E:\老男孩教育\python项目\Pycharm练习\网络编程\0906 模拟ssh(远程执行命令)功能和subprocess模块 的目录

2019/09/10 21:04

2.2 模拟ssh功能的服务端

import socket
import subprocess
soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc.bind(('192.168.11.176',8005))
soc.listen(5)
while True:  # 连接循环
    print('等待客户端连接')
    conn,addr = soc.accept()
    print('有个客户端连接上了>>>',addr)
    while True:  # 通信循环
        try:
            data = conn.recv(1024)
            if len(data) == 0:
                break
            print(data)
            # 使用subprocess模块
            obj = subprocess.Popen(str(data,encoding='utf8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
            # 执行正确的结果bytes格式,gbk编码(windows平台)
            msg = obj.stdout.read()
            # 把执行的结果通过网络传给c端
            conn.send(msg)
        except Exception:
            break
    # 关闭通路
    conn.close()

# 关闭连接
soc.close()

等待客户端连接
有个客户端连接上了>>> ('127.0.0.1', 50889)
b'dir'

转载于:https://www.cnblogs.com/zhuangyl23/p/11503359.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值