1.paramiko后直接用sftp或ftplib下载的都会有话单为空,故分开写
2.缺少异常处理,需保证所有host能通(偷懒了)
3.一个坑(readlines、strip),不出预期结果,卡了老半天
for i in stdout.readlines():
res[i.split('/')[-1][:22]] = i.strip()
# -*- conding:utf-8 -*-
import paramiko
import re
import threading
import ftplib
hosts = {
'cg16' : '172.20.25.88',
'cg17' : '172.20.14.167',
'cg18' : '172.20.14.176',
'cg19' : '172.20.25.70',
'cg20' : '172.20.25.79',
'cg21' : '172.20.25.199',
'cg22' : '172.20.25.208',
'cg23' : '172.20.25.217',
'cg24' : '172.20.25.226',
'cg25' : '172.20.24.231',
'cg26' : '172.20.24.240',
'cg27' : '172.20.30.9',
'cg28' : '172.20.30.18',
'cg29' : '172.20.30.27',
'cg30' : '172.20.30.36'
}
def query(host):
trans = paramiko.Transport((host,22))
trans.connect(username='cmd',password='cgadmin!')
ssh = paramiko.SSHClient()
ssh._transport = trans
stdin,stdout,stderr = ssh.exec_command('mkdir cdrtmp')
stdin,stdout,stderr = ssh.exec_command('ls -l /cdr/work/proc_raw/proc/archive_pgw[1-4]/*.dat|awk \'{print $NF}\'')
res = {}
for i in stdout.readlines():
res[i.split('/')[-1][:22]] = i.strip()
for k in res.keys():
if int(k[10:]) >= 201802281100 and int(k[10:])<= 201802281430:
cmd = 'cp ' + res[k] + ' /home/cmd/cdrtmp/'
stdin,stdout,stderr = ssh.exec_command(cmd)
cmd = 'java -jar /home/cmd/cutover/asn1find.jar -m 18421101592 /home/cmd/cdrtmp/*.dat'
stdin,stdout,stderr = ssh.exec_command(cmd)
cmd = 'ls -l cdrtmp/*.res|awk \'{print $NF}\'|while read line;do java -jar /home/cmd/cutover/epcdeccm.jar $line >$line.txt;done'
stdin,stdout,stderr = ssh.exec_command(cmd)
#sftp = paramiko.SFTPClient.from_transport(trans)
#stdin,stdout,stderr = ssh.exec_command('ls -l cdrtmp/*.txt|awk \'{print $NF}\'')
#for i in stdout.readlines():
#sftp.get(i.strip(),r'C:/Users/traffica/Desktop/cdrs/' + i.strip().split('/')[-1])
trans.close()
def download(host):
ftp = ftplib.FTP()
ftp.connect(host,21)
ftp.login('cmd','cgadmin!')
ftp.cwd('cdrtmp')
for i in ftp.nlst():
if re.search('res.txt',i):
f = open(r'C:/Users/traffica/Desktop/cdrs/'+i,'wb')
ftp.retrlines('RETR %s' % i, f.write)
f.close()
ftp.quit()
def remove(host):
trans = paramiko.Transport((host,22))
trans.connect(username='cmd',password='cgadmin!')
ssh = paramiko.SSHClient()
ssh._transport = trans
stdin,stdout,stderr = ssh.exec_command('rm -rf cdrtmp/')
trans.close()
if __name__ == '__main__':
thread = []
for i in hosts.keys():
t = threading.Thread(target=query,args=(hosts[i],))
thread.append(t)
for t in thread:
t.start()
for t in thread:
t.join()
print 'Query over!'
threads = []
for i in hosts.keys():
t = threading.Thread(target=download,args=(hosts[i],))
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
print 'Download Over!'
threadsrm = []
for i in hosts.keys():
t = threading.Thread(target=remove,args=(hosts[i],))
threadsrm.append(t)
for t in threadsrm:
t.start()
for t in threadsrm:
t.join()
print 'Remove Over!'