python与linux的交互

 代码执行结果图:

python与linux的交互_第1张图片

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

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)

你可能感兴趣的