# -*- coding: utf-8 -*-
#from ftplib import FTP

__authour__='CC'

import os
import telnetlib
import time
import shutil
import socket
#import pdb
import paramiko
from Tkinter import *
import glob
import re

def get_version_path(n1,n2,n3):
if(int(n2)==0 and int(n1)==5):
n11=n1
print('Upgrade version is v5.0 version')
if(int(n2)==1):
n11=n1 + '.' + n2
print('Upgrade version is v5.1 version')
if(int(n2)==5):
n11=n1 + '.' + n2
print('Upgrade version is v5.5 version')
if(int(n1)==6 and int(n2)==0):
n11=n1 + '.' + n2
print('Upgrade version is v6.0 version')
#判断是Temp version or official version
if int(n3)>500:
server_path_tp1 ='\\\\172.18.104.44\\R&D TN China\\R&D_Server\\Version Management\\Dev_Version\\TempVersion\\NPTI\\' + 'V' + n11 + '\\' + versionNUM
print 'version is a temp version'
else:
server_path_tp1 ='\\\\172.18.104.44\\R&D TN China\\R&D_Server\\Version Management\\Dev_Version\\Version to V&V\\NPTI\\' + 'V' + n11 + '\\' +'V' + versionNUM
print 'version is official vesion'
#print server_path_tp1
server_path_tp2=server_path_tp1+'*'

#通过通配符函数,通配名字"NPT/NPT-1800/V5.1/versionNUM*的路径。
#print server_path_tp2
server_path_tp3=glob.glob(server_path_tp2)
server_path_tp4=server_path_tp3[0]
server_path=str(server_path_tp4)

#print server_path

print ('Version path in server:%s' %server_path)
#print os.listdir(server_path)
#print os.getcwd()
#判断’D:\\version\\NPT\\1800‘是否存在
path='D:\\version\\NPT\\1800'
isExists=os.path.exists(path)
if not isExists:
os.makedirs(r'D:\\version\\NPT\\1800')
return server_path

def sftp_get_version(version_type,server_path,hostname):

os.chdir('D:\\version\\NPT\\1800')
s=n1+n2+n3
#print ('version_type is %d' %version_type)
if version_type==1 or 3:
source_file=server_path + '\\' +'NPT1800_Emb_'+ s +'.bin'
dest_file='NPT1800_Emb_'+ s +'.bin'
shafile= open(server_path + '\\' +'NPT1800_Emb_1p1_sha256')
sha.append(shafile.read( ))
print ('Hash of version is '+sha[0])
shafile.close( )
print ('source_file is %s' %source_file)
if version_type==2:
source_file=server_path + '\\' +'NPT1800_Emb_2p0_'+ s +'.bin'
dest_file='NPT1800_Emb_2p0_'+ s +'.bin'
shafile= open(server_path + '\\' +'NPT1800_Emb_2p0_sha256')
sha.append(shafile.read( ))
print ('Hash of version is '+sha[0])
shafile.close( )
print ('source_file is %s' %source_file)
#dest_file='NPT1800_Emb.bin'

FileExists=os.path.isfile(dest_file)
if not FileExists:
print 'Start get version ...........\n'
shutil.copyfile(source_file,dest_file)
print 'Get version successfully\n'
else:
print 'File exists'


try:
sftp_port = 22
username='root'
password='root'
t=paramiko.Transport(hostname,sftp_port)
t.connect(username=username,password=password)
sftp=paramiko.SFTPClient.from_transport(t)
local_dir = 'D:\\version\\NPT\\1800\\'
remote_dir='/sdboot/up/'
dest_file1='NPT1800_Emb.bin'
print 'Start upload new version ......'
sftp.put(os.path.join(local_dir,dest_file),os.path.join(remote_dir,dest_file1))
t.close()
print 'upload new version successful'

except:
print "upload new version fail"
t.close()

if __name__ == '__main__':
sha=[]
hostname = raw_input('Input NPT1800 IP like a.b.c.d\n')

versionNUM = raw_input('Input the full name of versionNUM like 5.0.018 please input 5.0.018 \n')
version_type = int(raw_input('1+1 mode input 1;2+0 mode input 2;1+1 mode print 3\n'))

listNum=versionNUM.split('.',)
n1=listNum[0]
n2=listNum[1]
n3=listNum[2]
server_path=get_version_path(n1,n2,n3)

sftp_get_version(version_type,server_path,hostname)


#记录ssh 登录日志
paramiko.util.log_to_file("log.log")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#ssh.connect("某IP地址",22,"用户名", "口令")
ssh.connect(hostname,22,"root", "root")
#sh 登录到NE,设置FTP连接权限:
'''
stdin, stdout, stderr = ssh.exec_command("/etc/init.d/xinetd stop")
stdin, stdout, stderr = ssh.exec_command("tcpsvd 0 21 ftpd -w /ftppub &")
stdin, stdout, stderr = ssh.exec_command("/etc/init.d/xinetd start")
'''
#修改startup文件
stdin, stdout, stderr = ssh.exec_command("sed -i 's/down/up/g' /sdboot/startup")
ssh1=ssh.invoke_shell()
ssh1.send('cd /sdboot/up/\n')
time.sleep(1)
ssh1.send('sha256sum NPT1800_Emb.bin\n')
time.sleep(7)
sha1 = ssh1.recv(10000)
print sha1
pattern1=re.compile(sha[0])
hash_match=re.findall(pattern1,sha1)
if hash_match:
print "Main MCP hash is OK"
if version_type ==3:
dest_file='NPT1800_Emb.bin'
stdin, stdout, stderr = ssh.exec_command('arp\n')
a=''
for std in stdout.readlines():
a+=std
print a
pattern2=re.compile('(169.254.1.2|169.254.1.3)')
backup_ip=re.findall(pattern2,a)
print('Standby MCP IP is '+backup_ip[0])

str='ftpput -u root '+backup_ip[0]+' /sdboot/up/'+dest_file+' /sdboot/up/'+dest_file+'\n'
print str
stdin, stdout, stderr = ssh.exec_command(str)
print stdout.readline()
b=''
for std in stdout.readlines():
b+=std
print b
ssh1.send('telnet '+backup_ip[0]+'\n')
time.sleep(1)
ssh1.send('root\n')
ssh1.send('cd /sdboot/up/\n')
time.sleep(1)
ssh1.send('sha256sum NPT1800_Emb.bin\n')
time.sleep(7)
sha2 = ssh1.recv(10000)
print sha2
pattern1=re.compile(sha[0])
hash_match1=re.findall(pattern1,sha2)
if hash_match1:
print "Standby MCP hash is OK"
#print "Start sync version.........."
ssh1.send("sed -i 's/down/up/g' /sdboot/startup\n")
time.sleep(1)
edit_up= ssh1.recv(10000)
print edit_up
print "Start to sync standby MCP version........"
ssh1.send('sync\n')
else:
print "Standby MCP shasum error"


if (hash_match!=[])and(hash_match1!=[]):
print "Start to sync main MCP version.........."
stdin, stdout, stderr = ssh.exec_command("sync")
print stdout.readline()
print "Finish main MCP sync version"
time.sleep(60)
sync_result=ssh1.recv(10000)
print sync_result
pattern_sync=re.compile('#')
sync_complete=re.findall(pattern_sync,sync_result)
if sync_complete==1:
print 'Complete Standby MCP.'
else:
print 'Standby MCP sync error!'
else:
print "shasum error"
ssh.close()
raw_input('press any key to exit \n')

NE Upgrade python script. Need to write a Tkinter GUI for it的更多相关文章

  1. java + spring (jython\python\script) Error:SyntaxError: no viable alternative at character '\n'

    使用Jython结合java和Python开发功能时,要是遇到如下情况: 2016-03-10 16:16:49 DEBUG [com.freedom.orion.configs.JyhtonConf ...

  2. Windows 配置Apache以便在浏览器中运行Python script的CGI模式

    打开httpd.conf,找到”#ScriptInterpreterSource Registry “,移除前面的注释# (如果找不到这行,就自己添加进去) 找到“Options Indexes Fo ...

  3. Notepad++插件Emmet和Python Script的安装

    最近在做一个项目,涉及到大量的HTML.CSS代码的编写,手动写代码效率实在 是低下.于是想搜索一下,有没有Notepad++插件可以支持自动生成的,果不其然还真有.Emmet,这款神器其实就是 Ze ...

  4. rc.local 注意事項,call python script, file position

    如果要在 rc.local 呼叫 python script python script 的位置需使用絕對路徑 其 python script 裡的有關 file 的位置也需使用 絕對路徑 如果要在 ...

  5. A python script to check NE syncfail and get log from CIPS

    #! /usr/bin/env python # -*- coding: UTF-8 -*- """The script is to check whether NE i ...

  6. My first python script for work

    I write it yesterday to watch the NE process(rcpfd,cfgd) automatically, then i will write a window t ...

  7. [译]Why do people write #!/usr/bin/env python on the first line of a Python script?

    If you have several versions of Python installed, /usr/bin/env will ensure the interpreter used is t ...

  8. [Python] Execute a Python Script

    Python scripts can be executed by passing the script name to the python command or created as execut ...

  9. Excel vba call Python script on Mac

    How can I launch an external python process from Excel 365 VBA on OSX? It took me a while, but I fig ...

随机推荐

  1. [CC]DgmOctree—执行Cell遍历和单元计算

    DgmOctree类的executeFunctionForAllCellsAtLevel和executeFunctionForAllCellsStartingAtLevel方法通过回调函数octree ...

  2. HBASE基础知识

    HBASE的集群的搭建HBASE的表设计HBASE的底层存储模型 HBase 是一个高可靠.高性能.面向列.可伸缩的分布式缓存系统.利用HBase 技术可在廉价PC Server上搭建起大规模结构化存 ...

  3. Python中的浅拷贝 深拷贝

    浅拷贝只拷贝父对象,子对象的地址空间不改变,包括下面三种: 1. copy 从下面的例子可以看出对象c从a拷贝,当对象a增加一个列表元素之后,c对象没有改变, 而当对象a中的子列表改变时,对象c的子列 ...

  4. python3爬取网页

    爬虫 python3爬取网页资源方式(1.最简单: import'http://www.baidu.com/'print2.通过request import'http://www.baidu.com' ...

  5. [转]DAO层,Service层,Controller层、View层

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  6. 【js跨域】js实现跨域访问的几种方式

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  7. LCD接口(转载)

    LCD接口分类 1.   I8080接口,我觉得应该就是所谓的8080,通常会用在12864屏上面,且有内部sdram,不需要实时的刷新图片,速度有限制, 支持的数据宽度有8/9/16/18bit,接 ...

  8. HAL驱动库学习-ADC

    如何使用ADC驱动库 1  实现如下两个函数     a: HAL_ADC_MspInit()使能ADC时钟,设置时钟源, 使能ADC Pin,设置为输入模式,可选 DMA,中断     b:HAL_ ...

  9. mysql5.6.23免安装配置

    1.官网下载,并解压 2.环境变量,path下,追加mysql的bin路径D:\Program Files\mysql\bin; 3.mysql目录下的my-default.ini重命名为my.ini ...

  10. LA 4329 Ping pong 树状数组

    对于我这样一名脑残ACMer选手,这道题看了好久好久大概4天,终于知道怎样把它和“树状数组”联系到一块了. 树状数组是什么意思呢?用十个字归纳它:心里有数组,手中有前缀. 为什么要用树状数组?假设你要 ...