文档章节

sw_tools_check.py

xxjbs001
 xxjbs001
发布于 2014/06/09 15:35
字数 1227
阅读 14
收藏 0
#!/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()




© 著作权归作者所有

共有 人打赏支持
xxjbs001
粉丝 55
博文 749
码字总数 215621
作品 0
浦东
QA/测试工程师
服务端测试环境hosts配置检查脚本

[本文出自天外归云的博客园] 问题 由于A测试环境和B测试环境相互耦合,B测试环境切换导致我方测试环境需要更改后台服务器的响应配置。若多台服务器中有一台服务器没有更改配置,则在测试过程...

天外归云
2017/09/14
0
0
何朝威/zscat_sw

springboot dubbo redis solr mq kafka 商城 blog cms 单机版商城 http://git.oschina.net/JiaGou-XiaoGe/payshop jeeplus单机版商城 https://gitee.com/JiaGou-XiaoGe/jeeplusBanDuoShangJi......

何朝威
2017/10/23
0
0
机器学习分析Web攻击请求之XSS

结果: [root@kali xiaokui]# python3 check.py [1 0 1] 关键点: 使用正则处理所有请求。 regex = re.compile(r"w+W") tok = lambda x: regex.findall(x) 本打算把正样本"" 处理为 "['<', '......

xi4okv
2017/12/19
0
0
ksc/raspi_router

#把树莓派打造成智能无线路由器 ###使用方法 你可以 用git检出一份 apt-get install gitgit clone http://git.oschina.net/ksc/raspi_router 或者直接下载zip压缩包 wget http://git.oschin...

ksc
2015/02/10
0
0
Mac下appium-doctor提示错误汇总

一、 提示 [Error: Could not detect Mac OS X Version from sw_vers output: '10.12'] 解决方法: 1、终端执行下面指令 grep -rl "Could not detect Mac OS X Version from sw_vers output:......

niedongri
2017/09/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

中国发布域名系统基础软件 “红枫”

9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软件 “红枫(Maple DNS)”。 9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软...

问题终结者
16分钟前
1
0
Shell编程(分发系统介绍、expect远程登录、expect远程执行命令、expect传递参数)

分发系统介绍expect 分发系统expect即分发脚本,是一种脚本语言;通过他可以实现传输,输入命令(上线代码) 应用场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者...

蛋黄_Yolks
21分钟前
1
0
Java Http请求工具类

public static String httpPost(String source, String params) {URL url = null;HttpURLConnection conn = null;OutputStream os = null;String ret = null;try {......

yuewawa
28分钟前
1
0
C++11 智能指针

C++11提供了三个智能指针,std::shared_ptr,std::unique_ptr,std::weak_ptr。最常用的是shared_ptr和unique_ptr。 (1)std::shared_ptr shared_ptr是共享指针,通过在控制块中增加引用计数...

yepanl
29分钟前
1
0
React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部