代码执行结果图:
各位小伙伴可以拿去玩玩,快乐就完事了
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)