sw_tools_check.py
博客专区 > xxjbs001 的博客 > 博客详情
sw_tools_check.py
xxjbs001 发表于4年前
sw_tools_check.py
  • 发表于 4年前
  • 阅读 12
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

摘要: sw_tools_check.py
#!/usr/bin/env python
#coding=utf-8
import csv
import csvtodic
from csvtodic import csvtodictlist,dictlisttocsv
from optparse import OptionParser
from optparse import OptionGroup
import logging
from pprint import pprint
from pprint import pformat
import syslog
import subprocess
import signal
import time
import select
import commands
import os
import sys


def subproc(cmd, timeout=3600,mute=True) :
        """
        subprogress to run command
        """
        rc = None
        output = ''
        #
        #print('subproc : ' + cmd)
        if not mute : print('timout : ' + str(timeout))
        try :
            #
            p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True, shell=True)
            pi, po, pe = p.stdin, p.stdout, p.stderr
            while_begin = time.time()
            while True :
                to = 600
                fs = select.select([p.stdout, p.stderr], [], [], to)
                #if p.poll() : break
                #print '.....',
                if p.stdout in fs[0]:
                    #print '---xxxifs0:',fs[0]
                    tmp = p.stdout.readline()
                    if tmp :
                        output += tmp
                        #print(tmp)
                        #if not mute : print(tmp)
                    else :
                        #print '---end'
                        #print time.time()
                        while None == p.poll() : pass
                        break
                elif p.stderr in fs[0]:
                    #print "!!!!!!!!!!!!!!!"
                    tmp = p.stderr.readline()
                    if tmp :
                        output += tmp
                        #plogger.error(tmp)
                    else :
                        #print 'end'
                        #print time.time()
                        while None == p.poll() : pass
                        break
                else:
                    #print 'Timeout'
                    #os.system('ps -f')
                    s = os.popen('ps -f| grep -v grep |grep sleep').read()

                    if len(s.strip()) :
                        print('No output in sleep : ' + s)
                        continue

                    print('Timeout ' + str(to) + ' seconds without any output!')
                    print(os.popen('ps -p ' + str(p.pid)).read())
                    p.kill()

                    #os.kill(p.pid, signal.SIGKILL)
                    break
                #timeout = timeout - (time.time() - while_begin)
                # Check the total timeout
                dur = time.time() - while_begin
                if dur > timeout :
                    print('The subprocess is timeout more than ' + str(timeout))
                    break
            # return
            rc = p.poll()
            # close all fds
            p.stdin.close()
            p.stdout.close()
            p.stderr.close()
            #print('return value : ' + str(rc))

        except Exception, e :
            print('Exception : ' + str(e))
            #rc = False
        return rc, output


 
def sw_online(dic, online_flag ) : 
    if online_flag == 'online':
       if dic["cmd_install_online"] == '':
          print( '%s have no online install command' % (str(dic["description"])))
       else:   
          cmd_install = dic["cmd_install_online"].splitlines()
          #print ('%s installing latest version online !!' % (str(dic["description"])))
          i = 0 
          for h in cmd_install:
              install_code,install_output =  subproc(h)
              if install_code != 0: 
                     print ('%s install failed:%s' % (str(dic["description"]),str (install_output)))
                     i+=1
          if i == 0 :               
             print( '%s online install success!!' % (str(dic["description"])))

def sw_offline(dic, online_flag, pk_path, cmdlist ) : 
    if online_flag == 'offline':
       if dic["cmd_install_offline"] == '':
          print( '%s have no offline install command' % (str(dic["description"])))
          cmdlist.append(dic["description"]) 
       elif pk_path == '':
          print( '%s have no offline packet dir! ' % (str(dic["description"])))
       else:   
            #pk_path = 'cd ' + pk_path
           # print'pk_path is: ', pk_path
            if 'all' not in pk_path :
                pk_path = pk_path+'/'+'all'
            os.chdir(pk_path)
            dir = os.getcwd()
            #print 'dir1 is :',dir
            if dir != pk_path :
               print( '%s cd  packet dir error : %s! ' % ((str(dic["description"]), str(pk_path))))
            cmd_install = dic["cmd_install_offline"].splitlines()
           # print ('%s installing offline !!' % (str(dic["description"])))
            j = 0 
            #s = 'already installed'
            str_cd = 'cd'
            for h in cmd_install:
                  new_str = str(h)
                  if str_cd in new_str:
                   # print 'dir is :',dir  
                    new_path = dir + '/'+new_str[3:] 
                    #print "new_path is:", new_path     
                    os.chdir(new_path)  
                    new_dir = os.getcwd()
                    #print 'new_dir is :',new_dir  
                  else:
                    install_code,install_output =  subproc(h)
                    #print 'install code is :' ,install_code
                    #stri = str (install_output)
                    if install_code != 0: 
                       #if s not in stri :
                          print ('%s install failed:%s' % (str(dic["description"]),str (install_output)))
                          j +=1
            if j == 0 :
               print( '%s offline install success!!' % (str(dic["description"])))
               os.chdir(pk_path)
               dir = os.getcwd()
               #print 'dir2 is :',dir

def main() :
    """
    """
    lie = []
    sys_argv = len(sys.argv)
    #print 'sys_argv:',sys_argv
    if sys_argv==1:
       path = 'software_checking.csv'
       online = None
       pk_path = None
       check_flag = 'check'     
       print 'checking software ,wait a moment!'
       
    elif sys.argv[1] =='--with-version':
       path = 'software_checking.csv'
       online = None
       pk_path = None
       check_flag ='version'
    elif sys.argv[1] =='--force-install-online':
       path = 'software_checking.csv'
       online = 'online'
       pk_path = None
       check_flag ='version'
    elif sys.argv[1] =='--force-install-offline':
       path = 'software_checking.csv'
       online = 'offline'
       pk_path = os.getcwd()
       check_flag ='version'
    elif sys.argv[1] =='--install-online':
       path = 'software_checking.csv'
       online = None
       pk_path = None
       check_flag ='not_version'
    elif sys.argv[1] =='--install-offline':
       path = 'software_checking.csv'
       online = None
       pk_path = None
       #pk_path = os.getcwd()
       check_flag ='not_version'
    elif sys.argv[1] !='':
         
       print 'need add parameter!\none of them: \n--with-version:check tools verison \n--force-install-online: not check tools force install online\n--force-install-offline:not check tools force install offline\n--install-online: check tools ,if not exist, install online\n--install-offline:check tools ,if not exist, install offline\n if have no parameter , check tools not exits'
       return 0
    csvtodictlist(lie,path)
    #READ_ONLY = (select.POLLIN | select.POLLPRI | select.POLLHUP | select.POLLERR)
    #p=select.poll()
    #p.register(li,READ_ONLY)
    #result = p.poll()
    #if result == 0:
     #  print'...',
        
    #copy file to need dir cp -r i386/* /var/cache/yum/i386/
    copy_cmd ='cp -r all/i386/* /var/cache/yum/i386/'
    copy_code, copy_output =  subproc(copy_cmd)
    if copy_code !=0 :
       print 'copy dir error!!!:',copy_output
       return 0
    m = 0
    error =0
    warnning = 0
    disable  = 0
    errorlist = []
    warnninglist = []
    offcmdlist = []
    disablelist = []
    rtype = []
    otype = []
    dtype = []
    while m<len(lie):
          if lie[m]["status"] == 'required':
             sw_online(lie[m], online )
             sw_offline(lie[m], online, pk_path,offcmdlist) 
             #print lie[m]["status"]
             #print ".....",
             check_code, check_output =  subproc(lie[m]["cmd_check"])
 	     if lie[m]["cmd_version"] != '' and lie[m]["description"] != '' and check_code == 0 :	  
                 version_code,version_output =  subproc(lie[m]["cmd_version"])
                 if version_code != 0:
                    print lie[m]["description"],
                    print 'Version get error!'
                    print 'version_code is :',version_code
                    print 'version_output is :', version_output
                 elif version_code == 0:
                        # if version_output == lie[m]["expect_version"]:
                          if check_flag != 'check' and check_flag != 'not_version':
                            print lie[m]["description"],
                            print ('type:%s ,version:%s' % (str(lie[m]["type"]),str(version_output)))
             if lie[m]["cmd_version"] == '':
                if check_flag != 'check' and check_flag != 'not_version':
                   print lie[m]["description"],
                   print ('type:%s, Not find version command!\n' %(str(lie[m]["type"])))     
             if check_code != 0:
                               
               if  sys_argv != 1 and sys.argv[1] =='--install-online':
                  print('%s not exist , install online'% (str(lie[m]["description"])))
                  str_online = 'online'
                  sw_online(lie[m], str_online )
               elif sys_argv != 1 and sys.argv[1] =='--install-offline':
                  print('%s not exist , install offline'% (str(lie[m]["description"])))
                  str_online = 'offline'
                  pk_path = os.getcwd()
                  sw_offline(lie[m], str_online, pk_path,offcmdlist)
               else :    
                  error+=1
                  errorlist.append(lie[m]["description"])
                  rtype.append(lie[m]["type"])

          if lie[m]["status"] == 'optional':
             sw_online(lie[m], online )
             sw_offline(lie[m], online, pk_path, offcmdlist ) 
             #print ".....",
             check_code, check_output =  subproc(lie[m]["cmd_check"])
 	     if lie[m]["cmd_version"] != '' and lie[m]["description"] != '' and check_code == 0 :	  
                 version_code,version_output =  subproc(lie[m]["cmd_version"])
                 if version_code != 0:
                    print lie[m]["description"],
                    print 'Version get error!'
                 elif version_code == 0:
                           if check_flag != 'check' and check_flag != 'not_version':
                               print lie[m]["description"],
                               print ('type:%s , version:%s' % (str(lie[m]["type"]),str(version_output)))
                               #print 'current version is:', version_output
                            #print 'version_code is :',version_code
             if lie[m]["cmd_version"] == '':
                if check_flag != 'check' and check_flag != 'not_version' :
                   print lie[m]["description"],
                   print ('type:%s , Not find  version command!\n' %(str(lie[m]["type"])))     
                   #print 'not find get Version command'      
             if check_code != 0:
               if sys_argv != 1 and  sys.argv[1] =='--install-online':
                  print('%s not exist , install online'% (str( lie[m]["cmd_version"])))
                  str_online = 'online'
                  sw_online(lie[m], str_online )
               elif sys_argv !=1 and  sys.argv[1] =='--install-offline':
                  print('%s not exist , install offline'% (str(lie[m]["cmd_version"])))
                  str_online = 'offline'
                  pk_path = os.getcwd()
                  sw_offline(lie[m], str_online, pk_path,offcmdlist)
               else :    
                  warnning+=1
                  warnninglist.append(lie[m]["description"])
                  otype.append(lie[m]["type"])

          if lie[m]["status"] == 'disabled':
              sw_online(lie[m], online )
              disable+=1
              disablelist.append(lie[m]["description"])
              dtype.append(lie[m]["type"])
          m+=1
    if check_flag == 'check':
      l = 0     
      print '\nRequired software not find:' ,error
      if len(errorlist)==0 :
          print ('All required software are installed')
      while l<len(errorlist): 
           print ('Type:%s  Name:%s'% (str(rtype[l]),str( errorlist[l])))
           l+=1
      k = 0
      print 'Optional software not find  :' ,warnning
      if len(warnninglist)==0 :
	  print ('All optional software are installed')
      while k<len(warnninglist): 
           print ('Type:%s Name: %s'% (str(otype[k]),str( warnninglist[k])))
           k+=1
      n = 0
      print 'Disabled software :' ,disable
      if len(disablelist)==0 :
          print ('There is no disabled tools')
      while n<len(disablelist):
           print ('Type:%s  Name:%s'% (str(dtype[n]),str( disablelist[n])))
           #print disablelist[n],                           
           n+=1
    else :
       return 0    

							
if __name__=="__main__":
    main()




  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 53
博文 298
码字总数 215621
×
xxjbs001
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: