python与linux的交互

 代码执行结果图:

 各位小伙伴可以拿去玩玩,快乐就完事了

import os
import re
import sys
import time
import paramiko
# sys.path.extend([r'C:\Users\lxy\Documents\pycharm\部署按数据发现与分级分类\class'])
from icecream import ic

class All():
    def __init__(self):
        self.data={
            'ip':'192.168.102.141',
            'uname':'root',
            'pswd':'root',
            'port':22,
        }

        #创建session
        trans = paramiko.Transport((self.data['ip'], self.data['port']))
        # 交互式安装
        trans.start_client()
        # 用户名密码方式
        trans.auth_password(username=self.data['uname'], password=self.data['pswd'])
        # 打开一个通道
        channel = trans.open_session()
        channel.settimeout(7200)
        # 获取一个终端
        channel.get_pty()
        # 激活器
        channel.invoke_shell()
        self.channel=channel

    #执行普通命令,输入命令立马得出结果的。例如ls
    def ec(self,cmd):
        self.channel.send(cmd+'\r')
        pause=1
        all_str=''
        for i in range(0,60):
            time.sleep(pause)
            if not self.channel.recv_ready():
                temp=''
            else:
                temp=self.channel.recv(2048).decode('utf-8')
            all_str=all_str+temp
            if re.search('^[\[][a-zA-Z]+@.+?[\]][#|$] $',str(temp.split('\n')[-1])):
                ic(cmd,'命令结束')
                break
            else:
                continue
        s1 = all_str.split('\n')[-1]
        s3 = all_str.split(s1)[-2].replace(cmd + '\r', '').replace('\r', '')
        # ic('返回值',s3)
        return s3

    #执行交互命令,并不能是tail -1000f log.log 那样一直不停的命令,反正就是可以交互的命令,time_int是延时时间(s),可以写1,houzui就不用管了
    def ec_jh(self,cmd,time_int=None,houzui=None):
        if houzui:
            s9 = houzui
        else:
            s9 = '\r'
        self.channel.send(cmd+'\r')

        if time_int:
            pause=time_int
        else:
            pause = 0.1

        all_str=''
        js=0
        for i in range(0,60):
            time.sleep(pause)
            if not self.channel.recv_ready():
                temp=''
            else:
                temp=self.channel.recv(2048).decode('utf-8')

            all_str=all_str+temp

            if re.search('^[\[][a-zA-Z]+@.+?[\]][#|$] $', str(temp.split('\n')[-1])):
                # ic(cmd, '交互命令结束')
                break

            # ic(temp)
            if temp=='':
                js=js+1
            else:
                js=0

            if js>=10:
                # ic('等待10次后,仍无输出,返回,继续交互')
                break

        if len(all_str)>300:
            all_str1=all_str[0:150]+'\n..................\n'+all_str[-150:]
            ic(all_str1)
        else:
            ic(all_str)
        return all_str

if __name__ == '__main__':
    all=All()
    result=all.ec('uname -a ')
    ic(result)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lipaisan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值