# -*- 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. I’m Sure It Will Only Take You A Few Days To Code

    from:http://danshipper.com/non-technical-people-cant-estimate-developmen “So the site’s pretty simpl ...

  2. 优化phpstorm运行卡顿问题!

    在PHPSTORM中点击导航菜单:Help -> Edit Custom VM Options 如果是第一次点击,会提示是否新建配置文件,点击“是” 在弹出的编辑框末尾加上以下配置 -Dawt. ...

  3. Spring

    Spring 一个支持DI/IOC和AOP的开源容器框架 特点 DI/IOC DI 依赖注入(组件以特定方式接收来自容器的资源注入) IOC 控制反转(反转资源获取的方向) AOP 面向切面编程 开发 ...

  4. c++友元函数

    c++友元函数分两类: 一://友员全居函数 /*#include <iostream>using namespace std;class aaa{    friend void prin ...

  5. Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化

    Android MVP粗来已经有段时间了,在项目中我也多多少少用了一些,不得不说代码使用这种模式后,条例确实清晰了好多,整个流程看起来有点各司其职的感觉(另一种的java面向对象的方式). 不过这里是 ...

  6. internet选项菜单灰色

    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer”下,然后在“Internet Explorer”上单击右键,在选择“删除”.

  7. 使用Git、Git GUI和TortoiseGit

    1. 关于命令行 我一直建议在命令行中使用Git或者SVN.因为这样可能更加了解他们的工作方式,也不容易遗漏重要的问题和提醒. 在Windows习惯的驱使下,大多数人是不会看弹出的对话框中有什么信息的 ...

  8. BZOJ1095 [ZJOI2007]Hide 捉迷藏

    动态树分治,用三个set分别维护每个重心到每一个子树的距离种类.每个重心所有子树的最大值和次大值.全局答案的最大值.复杂度O(nlogn^2) 代码 #include<cstdio> #i ...

  9. The connection to adb is down,and a server error has occured.解决办法---------------------亲测有效

    认真读error: 办法一: 点击项目右键->Android tools ->Fix Project Properties,检查项目属性 办法二: 设备管理器,查看是否存在adb进程 如果 ...

  10. [原] MSSQL MDF文件太大问题

    USE 你的库名; GO -- 数据库空间使用情况 EXEC sp_spaceused; -- 查下文件空间使用情况 SELECT file_id, name, [文件大小(MB)] = size / ...