• Python图书管理系统


    图书管理系统

    在这里插入图片描述
    功能简介

    • 添加图书时,图书ID不能重复,图书名可重复
    • 删除,查询,修改功能,输入图书名之后提供所有的同名的图书,用户可以按照图书序号对具体的一本书进行操作
    • 显示书籍,分行显示,每行一本书的信息

    书籍信息以如下格式保存在txt文本文件格式下
    在这里插入图片描述

    源代码

    # -*- coding:utf-8 -*-
    #############################################################################
    # Portions Copyright (c) 2020 Huawei Technologies Co.,Ltd.
    # Portions Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com
    # Portions Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info@egenix.com
    #
    # openGauss is licensed under Mulan PSL v2.
    # You can use this software according to the terms
    # and conditions of the Mulan PSL v2.
    # You may obtain a copy of Mulan PSL v2 at:
    #
    #          http://license.coscl.org.cn/MulanPSL2
    #
    # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
    # WITHOUT WARRANTIES OF ANY KIND,
    # EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
    # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
    # See the Mulan PSL v2 for more details.
    # ----------------------------------------------------------------------------
    # Description  : gsplatform.py is a utility to do something for
    #               platform information.
    #############################################################################
    
    """ The following platform framework is used to handle any differences between
        the platform's we support.  The GenericPlatform class is the base class
        that a supported platform extends from and overrides any of the methods
        as necessary.
    """
    
    import os
    import sys
    import re
    import subprocess
    import platform
    import socket
    import time
    
    sys.path.append(sys.path[0] + "/../../")
    from gspylib.common.ErrorCode import ErrorCode
    
    localDirPath = os.path.dirname(os.path.realpath(__file__))
    sys.path.insert(0, localDirPath + "/../../../lib/netifaces/")
    sys.path.append(localDirPath + "/../inspection/lib/netifaces/")
    try:
        from netifaces import interfaces, ifaddresses, AF_INET, AF_INET6
    except ImportError as e:
        # get python unicode value. The current environment python is compiled
        # with UCS2 or UCS4.
        # 1114111 is UCS4
        # 65535 is UCS2
        flagNum = 4 if sys.maxunicode == 1114111 else 2
        omToolsNetifacesPath = os.path.join(
            localDirPath, "./../../../lib/netifaces/netifaces.so")
        inspectToolsNetifacesPath = os.path.join(
            localDirPath, "./../../../script/gspylib/inspection/
            lib/netifaces/netifaces.so")
        newPythonDependNetifacesPath = "%s_UCS%d" % (omToolsNetifacesPath,
                                                     flagNum)
        glo_cmd = "rm -f '%s' && " 
                  "cp -f -p '%s' '%s' " % (omToolsNetifacesPath,
                                           newPythonDependNetifacesPath,
                                           omToolsNetifacesPath)
        glo_cmd += " && rm -f '%s' && " 
                   "cp -f -p '%s' '%s' " % (inspectToolsNetifacesPath,
                                            newPythonDependNetifacesPath,
                                            inspectToolsNetifacesPath)
        flagExce = True
        for retryNum in range(3):
            (statusExec, outputExec) = subprocess.getstatusoutput(glo_cmd)
            if statusExec != 0:
                flagExce = False
                time.sleep(1)
            else:
                flagExce = True
                break
        if not flagExce:
            raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % glo_cmd
                            + "Error:
    %s" % outputExec)
        from netifaces import interfaces, ifaddresses, AF_INET, AF_INET6
    
    # ---------------platforms--------------------
    # global variable for our platform
    _supported_dists = (
        'SuSE', 'debian', 'fedora', 'redhat', 'centos', 'euleros', "openEuler",
        'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo',
        'UnitedLinux', 'turbolinux')
    _release_filename = re.compile(r'(w+)[-_](release|version)')
    _lsb_release_version = re.compile(r'(.+)'
                                      ' release '
                                      '([d.]+)'
                                      '[^(]*(?:((.+)))?')
    _release_version = re.compile(r'([^0-9]+)'
                                  '(?: release )?'
                                  '([d.]+)'
                                  '[^(]*(?:((.+)))?')
    SUSE = "suse"
    REDHAT = "redhat"
    CENTOS = "centos"
    EULEROS = "euleros"
    KYLIN = "kylin"
    OPENEULER = "openeuler"
    SUPPORT_WHOLE_PLATFORM_LIST = [SUSE, REDHAT, CENTOS, EULEROS, OPENEULER, KYLIN]
    # RedhatX platform
    SUPPORT_RHEL_SERIES_PLATFORM_LIST = [REDHAT, CENTOS, "kylin"]
    SUPPORT_RHEL6X_VERSION_LIST = ["6.4", "6.5", "6.6", "6.7", "6.8", "6.9", "10"]
    SUPPORT_RHEL7X_VERSION_LIST = ["7.0", "7.1", "7.2", "7.3", "7.4", "7.5", "7.6", "10"]
    SUPPORT_RHEL_SERIES_VERSION_LIST = (SUPPORT_RHEL6X_VERSION_LIST +
                                        SUPPORT_RHEL7X_VERSION_LIST)
    # EulerOS 2.3 -> 2.0 SP3
    SUPPORT_EULEROS_VERSION_LIST = ["2.0"]
    # SuSE platform
    SUSE11 = "11"
    SUSE12 = "12"
    SUPPORT_SUSE_VERSION_LIST = [SUSE11, SUSE12]
    SUPPORT_SUSE11X_VERSION_LIST = ["1", "2", "3", "4"]
    SUPPORT_RHEL12X_VERSION_LIST = ["0", "1", "2", "3"]
    BIT_VERSION = "64bit"
    
    # ---------------command path--------------------
    CMD_PATH = ['/bin', '/usr/local/bin', '/usr/bin', '/sbin', '/usr/sbin']
    CMD_CACHE = {}
    BLANK_SPACE = " "
    COLON = ":"
    # Need to be consistent with the packaging script
    PAK_CENTOS = "CentOS"
    PAK_EULER = "Euler"
    PAK_OPENEULER = "openEuler"
    PAK_REDHAT = "RedHat"
    
    
    #######################################################
    _supported_dists = (
        'SuSE', 'debian', 'fedora', 'redhat', 'centos', 'euleros', "openEuler",
        'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo',
        'UnitedLinux', 'turbolinux', 'kylin')
    _release_filename = re.compile(r'(w+)[-_](release|version)')
    _lsb_release_version = re.compile(r'(.+)'
                                      ' release '
                                      '([d.]+)'
                                      '[^(]*(?:((.+)))?')
    _release_version = re.compile(r'([^0-9]+)'
                                  '(?: release )?'
                                  '([d.]+)'
                                  '[^(]*(?:((.+)))?')
    
    
    def _parse_release_file(firstline):
        """
        Default to empty 'version' and 'id' strings.  Both defaults are used
        when 'firstline' is empty.  'id' defaults to empty when an id can not
        be deduced.
        """
        version = ''
        idNum = ''
    
        # Parse the first line
        m = _lsb_release_version.match(firstline)
        if m is not None:
            # LSB format: "distro release x.x (codename)"
            return tuple(m.groups())
    
        # Pre-LSB format: "distro x.x (codename)"
        m = _release_version.match(firstline)
        if m is not None:
            return tuple(m.groups())
    
        # Unkown format... take the first two words
        l = str.split(str.strip(firstline))
        if l:
            version = l[0]
            if len(l) > 1:
                idNum = l[1]
        return '', version, idNum
    
    
    def linux_distribution(distname='', version='', idNum='',
    
                           supported_dists=_supported_dists,
                           full_distribution_name=1):
        """
        Tries to determine the name of the Linux OS distribution name.
    
            The function first looks for a distribution release file in
            /etc and then reverts to _dist_try_harder() in case no
            suitable files are found.
    
            supported_dists may be given to define the set of Linux
            distributions to look for. It defaults to a list of currently
            supported Linux distributions identified by their release file
            name.
    
            If full_distribution_name is true (default), the full
            distribution read from the OS is returned. Otherwise the short
            name taken from supported_dists is used.
    
            Returns a tuple (distname,version,id) which default to the
            args given as parameters.
    
        """
        try:
            etc = os.listdir('/etc')
        except os.error:
            # Probably not a Unix system
            return distname, version, idNum
        sorted(etc)
        gFile = None
        for file in etc:
            if os.path.islink('/etc/' + file):
                continue
            m = _release_filename.match(file)
            if m is not None:
                _distname, dummy = m.groups()
                if _distname in supported_dists:
                    gFile = file
                    distname = _distname
                    break
    
        # Read the first line
        if gFile is None:
            return distname, version, idNum
        with open('/etc/' + gFile, 'r') as f:
            firstline = f.readline()
        _distname, _version, _id = _parse_release_file(firstline)
    
        if _distname and full_distribution_name:
            distname = _distname
        if _version:
            version = _version
        if _id:
            idNum = _id
        return distname, version, idNum
    
    
    def dist(supported_dists=_supported_dists):
        """ Tries to determine the name of the Linux OS distribution name.
    
            The function first looks for a distribution release file in
            /etc and then reverts to _dist_try_harder() in case no
            suitable files are found.
    
            Returns a tuple (distname,version,id) which default to the
            args given as parameters.
    
        """
        return linux_distribution(supported_dists=supported_dists,
                                  full_distribution_name=0)
    
    
    # ------------------platform module----------------------
    class CommandNotFoundException(Exception):
        """
        """
    
        def __init__(self, cmd, paths):
            """
            function: constructor
            """
            self.cmd = cmd
            self.paths = paths
    
        def __str__(self):
            """
            function: str
            input  : NA
            output : NA
            """
            return "Could not locate command: '%s' in this " 
                   "set of paths: %s" % (self.cmd, repr(self.paths))
    
    
    def findCmdInPath(cmd, additionalPaths=None, printError=True):
        """
        function: find cmd in path
        input: cmd, additionalPaths, printError
        output: NA
        """
        global CMD_CACHE
        if additionalPaths is None:
            additionalPaths = []
        if cmd not in CMD_CACHE:
            # Search additional paths and don't add to cache.
            for p in additionalPaths:
                f = os.path.join(p, cmd)
                if os.path.exists(f):
                    return f
    
            for p in CMD_PATH:
                f = os.path.join(p, cmd)
                if os.path.exists(f):
                    CMD_CACHE[cmd] = f
                    return f
    
            if cmd == "killall":
                gphome = os.getenv("GPHOME")
                if gphome is None or 
                        not os.path.exists(os.path.join(gphome, "script/killall")):
                    gphome = os.path.dirname(os.path.realpath(__file__))
                             + "/../../.."
                gphome = gphome.replace("\", "\\").replace('"', '\"\"')
                for rac in ["|", ";", "&", "$", "<", ">", "`", "\", "'", """,
                            "{", "}", "(", ")", "[", "]", "~", "*",
                            "?", " ", "!", "
    "]:
                    if rac in gphome:
                        raise Exception(
                            ErrorCode.GAUSS_502["GAUSS_50219"] % gphome
                            + " There are illegal characters in the path.")
                if gphome != "" and os.path.exists(os.path.join(gphome,
                                                                "script/killall")):
                    return os.path.join(gphome, "script/killall")
                else:
                    raise Exception(ErrorCode.GAUSS_502["GAUSS_50201"] % "killall")
    
            if printError:
                print('Command %s not found' % cmd)
            search_path = CMD_PATH[:]
            search_path.extend(additionalPaths)
            raise CommandNotFoundException(cmd, search_path)
        else:
            return CMD_CACHE[cmd]
    
    
    # Requirements:
    # 1. ulimit, ntpq, source, kerberos is not found under system path
    
    
    class GenericPlatform:
        """
        manage OS command,config or service for muti-platform
        """
    
        def __init__(self):
            """
            function: constructor
            """
            pass
    
        def echoCmdWithNoReturn(self, line, filePath):
            """
            function: echo cmd with no return
            input  : line, filePath
            output : str
            """
            cmd = "echo %s >> '%s' 2>/dev/null" % (line, filePath)
            return cmd
    
        def getCreateFileCmd(self, path):
            """
            function: get create file cmd
            input  : path
            output : str
            """
            cmd = "touch '%s'" % path
            return cmd
    
        def getMoveFileCmd(self, src, dest):
            """
            function: get move file cmd
            input  : src, dest
            output : str
            """
            cmd = "mv '%s' '%s'" % (src, dest)
            return cmd
    
        def get_machine_arch_cmd(self):
            """
            function: get machine arch cmd
            input  : NA
            output : str
            """
            return 'uname -i'
    
        def getDefaultLocale(self):
            """
            function: get default locale
            input  : NA
            output : str
            """
            return 'en_US.utf-8'
    
        def getRemoveCmd(self, pathType):
            """
            function: get remove cmd
            input  : pathType
            output : str
            """
            opts = " "
            if pathType == "file":
                opts = " -f "
            elif pathType == "directory":
                opts = " -rf "
            return findCmdInPath('rm') + opts
    
        def getChmodCmd(self, Permission, src, recursive=False):
            """
            function: get chmod cmd
            input  : Permission, src, recursive
            output : str
            """
            return findCmdInPath('chmod') + 
                   (" -R " if recursive else BLANK_SPACE) + 
                   Permission + BLANK_SPACE + src
    
        def getChownCmd(self, owner, group, src, recursive=False):
            """
            function: get chown cmd
            input  : owner, group, src, recursive
            output : str
            """
            return findCmdInPath('chown') + 
                   (" -R " if recursive else BLANK_SPACE) + owner + 
                   COLON + group + BLANK_SPACE + src
    
        def getCopyCmd(self, src, dest, pathType=""):
            """
            function: get copy cmd
            input  : src, dest, pathType
            output : str
            """
            opts = " "
            if pathType == "directory":
                opts = " -r "
            return findCmdInPath('cp') + " -p  -f " + opts + BLANK_SPACE + "'" + 
                   src + "'" + BLANK_SPACE + "'" + dest + "'"
    
        def getRemoteCopyCmd(self, src, dest, remoteHost, copyTo=True,
                             pathType="", otherHost=None):
            """
            function: get remote copy cmd
            input  : src, dest, remoteHost, copyTo=True,
                             pathType="", otherHost
            output : str
            """
            opts = " "
            if pathType == "directory":
                opts = " -r "
            if copyTo:
                return "pscp -x '%s' -H %s %s %s " % (opts.strip(),
                                                      remoteHost, src, dest)
            else:
                localhost = self.getLocalIp()
                if otherHost is not None:
                    localhost = otherHost
                return "pssh -s -H %s " pscp -x '%s' -H %s %s %s " " % (
                    remoteHost, opts.strip(), localhost, src, dest)
    
        def getHostName(self):
            """
            function : Get host name
            input : NA
            output: string
            """
            hostCmd = findCmdInPath('hostname')
            (status, output) = subprocess.getstatusoutput(hostCmd)
            # if cmd failed, then exit
            if status != 0:
                raise Exception(ErrorCode.GAUSS_502["GAUSS_50219"] % "host name"
                                + "The cmd is %s" % hostCmd)
            return output
    
        def getLocalIp(self):
            """
            function: Obtaining the local IP address
            input: NA
            output: str
            """
            return self.getHostName()
    
        def getScpCmd(self):
            """
            Get scp cmd for special remotely copy, just like remote to
            remote or remote to local.
            :return: str
            """
            return "pscp -H "
    
        def getUseraddCmd(self, user, group):
            """
            function: get user add cmd
            input  : user, group
            output : str
            """
            return findCmdInPath('useradd') + " -m " + user + " -g " + group
    
        def getUserdelCmd(self, user):
            """
            function: get userdel cmd
            input  : user
            output : str
            """
            return findCmdInPath('userdel') + " -r " + user
    
        def getGroupaddCmd(self, group):
            """
            function: get group add cmd
            input  : group
            output : str
            """
            return findCmdInPath('groupadd') + " " + group
    
        def getGroupdelCmd(self, group):
            """
            function: get group del cmd
            input  : group
            output : str
            """
            return findCmdInPath('groupdel') + " " + group
    
        def getMoveCmd(self, src, dest):
            """
            function: get move cmd
            input  : src, dest
            output : str
            """
            return findCmdInPath('mv') + " -f " + "'" + src + 
                   "'" + BLANK_SPACE + "'" + dest + "'"
    
        def getMakeDirCmd(self, src, recursive=False):
            """
            function: get make dir cmd
            input  : src, recursive
            output : str
            """
            return findCmdInPath('mkdir') + 
                   (" -p " if recursive else BLANK_SPACE) + "'" + src + "'"
    
        def getPingCmd(self, host, count, interval, packetSize=56):
            """
            function: get ping cmd
            input  : host, count, interval, packetSize
            output : str
            """
            opts = " "
            if int(packetSize) != int(56):
                opts = " -s " + str(packetSize)
            return findCmdInPath('ping') + BLANK_SPACE + host + " -c " + 
                   count + " -i " + interval + opts
    
        def getWcCmd(self):
            """
            function: get wc cmd
            input  : NA
            output : str
            """
            return findCmdInPath('wc')
    
        def getTarCmd(self):
            """
            function: get tar cmd
            input  : NA
            output : str
            """
            return findCmdInPath('tar')
    
        def getZipCmd(self):
            """
            function: get zip cmd
            input  : NA
            output : str
            """
            return findCmdInPath('zip')
    
        def getUnzipCmd(self):
            """
            function: get unzip cmd
            input  : NA
            output : str
            """
            return findCmdInPath('unzip')
    
        def getEchoCmd(self, echoString):
            """
            function: get echo cmd
            input  : echoString
            output : str
            """
            cmdStr = '%s "%s"' % (findCmdInPath('echo'), echoString)
            return cmdStr
    
        def getSedCmd(self):
            """
            function: get sed cmd
            input  : NA
            output : str
            """
            return findCmdInPath('sed')
    
        def getGrepCmd(self):
            """
            function: get grep cmd
            input  : NA
            output : str
            """
            return findCmdInPath('grep')
    
        def getLsofCmd(self):
            """
            function: get lsof cmd
            input  : NA
            output : str
            """
            return findCmdInPath('lsof') + " -i:"
    
        def getIfconfigCmd(self):
            """
            function: get ifconfig cmd
            input  : NA
            output : str
            """
            return findCmdInPath('ifconfig')
    
        def getIpCmd(self):
            """
            function: get ip cmd
            input  : NA
            output : str
            """
            return findCmdInPath('ip')
    
        def getDateCmd(self):
            """
            function: get date cmd
            input  : NA
            output : str
            """
            return findCmdInPath('date')
    
        def getAwkCmd(self):
            """
            function: get awk cmd
            input  : NA
            output : str
            """
            return findCmdInPath('awk')
    
        def getFindCmd(self):
            """
            function: get find cmd
            input  : NA
            output : str
            """
            return findCmdInPath('find')
    
        def getTouchCmd(self, filename):
            """
            function: get touch cmd
            input  : filename
            output : str
            """
            return findCmdInPath('touch') + BLANK_SPACE + filename
    
        def getListCmd(self):
            """
            function: get list cmd
            input  : NA
            output : str
            """
            return findCmdInPath('ls')
    
        def getSHA256Cmd(self):
            """
            function: get sha256 cmd
            input  : NA
            output : str
            """
            return findCmdInPath('sha256sum')
    
        def getProcessCmd(self):
            """
            function: get process cmd
            input  : NA
            output : str
            """
            return findCmdInPath('ps')
    
        def getCatCmd(self):
            """
            function: get cat cmd
            input  : NA
            output : str
            """
            return findCmdInPath('cat')
    
        def getDdCmd(self):
            """
            function: get dd cmd
            input  : NA
            output : str
            """
            return findCmdInPath('dd')
    
        def getCdCmd(self, path):
            """
            function: get cd cmd
            input  : path
            output : str
            """
            return 'cd' + BLANK_SPACE + "'" + path + "'"
    
        def getAllCrontabCmd(self):
            """
            function: get all crontab cmd
            input  : NA
            output : str
            """
            cmd = findCmdInPath('crontab') + BLANK_SPACE + " -l"
            return cmd
    
        def getCrontabCmd(self):
            """
            function: get crontab cmd
            input  : NA
            output : str
            """
            return findCmdInPath('crontab')
    
        def getKillProcessCmd(self, signal, pid):
            """
            function: get kill process cmd
            input  : signal, pid
            output : str
            """
            return findCmdInPath('kill') + " -" + signal + BLANK_SPACE + pid
    
        def getKillallCmd(self):
            """
            function: get killall cmd
            input  : NA
            output : str
            """
            return findCmdInPath('killall')
    
        def getKillallProcessCmd(self, signal, username, procName=""):
            """
            function: get killall process cmd
            input  : signal, username, procName
            output : str
            """
            if procName != "":
                return findCmdInPath('killall') + " -s " + signal + " -u " + 
                       username + BLANK_SPACE + procName
            else:
                return findCmdInPath('killall') + " -s " + signal + " -u " + 
                       username
    
        def getXargsCmd(self):
            """
            function: get xargs cmd
            input  : NA
            output : str
            """
            return findCmdInPath('xargs')
    
        def getDeleteSemaphoreCmd(self, user):
            """
            function: get delete semaphore cmd
            input  : user
            output : str
            """
            ipcs = findCmdInPath('ipcs')
            ipcrm = findCmdInPath('ipcrm')
            xargs = findCmdInPath('xargs')
            awk = findCmdInPath('awk')
            return "%s -s | %s '/ %s /{print $2}' | %s -n1 %s -s" % (
                ipcs, awk, user, xargs, ipcrm)
    
        def getProcessIdByKeyWordsCmd(self, keywords):
            """
            function: get proecess id by keywords cmd
            input  : keywords
            output : str
            """
            ps = findCmdInPath('ps')
            grep = findCmdInPath('grep')
            awk = findCmdInPath('awk')
            return "%s -ef| %s -F '%s' | %s -F -v 'grep'| %s '{print $2}'" % (
                ps, grep, keywords, grep, awk)
    
        def getSysctlCmd(self):
            """
            function: get sysctl cmd
            input  : NA
            output : str
            """
            return findCmdInPath('sysctl')
    
        def getServiceCmd(self, serviceName, action):
            """
            function: get service cmd
            input  : serviceName, action
            output : str
            """
            return findCmdInPath('service') + BLANK_SPACE + serviceName + 
                   BLANK_SPACE + action
    
        def getSystemctlCmd(self, serviceName, action):
            """
            function: get systemctl cmd
            input  : serviceName, action
            output : str
            """
            return findCmdInPath('systemctl') + BLANK_SPACE + action + 
                   BLANK_SPACE + serviceName
    
        def getUlimitCmd(self):
            """
            function: get ulimit cmd
            input  : NA
            output : str
            """
            return 'ulimit'
    
        def getGetConfValueCmd(self):
            """
            function: get conf value cmd
            input  : NA
            output : str
            """
            return findCmdInPath('getconf') + " PAGESIZE "
    
        def getBlockdevCmd(self, device, value="", isSet=False):
            """
            function: get block dev cmd
            input  :  device, value, isSet
            output : str
            """
            if isSet and value != "":
                return findCmdInPath('blockdev') + " --setra " + value + 
                       BLANK_SPACE + device
            else:
                return findCmdInPath('blockdev') + " --getra " + device
    
        def getSysModManagementCmd(self, OperType, module):
    
            """
            OperType: list     --list system module
                  load     --load system module
                  insert   --insert system module by force
                  remove   --remove system module
                  dep      --generate modules.dep and map files
            """
            if OperType == "list":
                return findCmdInPath('lsmod') + BLANK_SPACE + module
            elif OperType == "load":
                return findCmdInPath('modprobe') + BLANK_SPACE + module
            elif OperType == "insert":
                return findCmdInPath('insmod') + BLANK_SPACE + module
            elif OperType == "remove":
                return findCmdInPath('rmmod') + BLANK_SPACE + module
            elif OperType == "dep":
                return findCmdInPath('depmod') + BLANK_SPACE + module
            else:
                raise Exception(ErrorCode.GAUSS_514["GAUSS_51404"] + OperType)
    
        def getMountCmd(self):
            """
            function: get dd cmd
            input  : NA
            output : str
            """
            return findCmdInPath('mount')
    
        def getLocaleCmd(self):
            """
            function: get locale cmd
            input  : NA
            output : str
            """
            return findCmdInPath('locale')
    
        def getPasswordExpiresCmd(self, user):
            """
            function: get password expires cmd
            input  : NA
            output : str
            """
            return findCmdInPath('chage') + " -l " + user
    
        def getIOStatCmd(self):
            """
            function: get io stat cmd
            input  : NA
            output : str
            """
            return findCmdInPath('iostat') + " -xm 2 3 "
    
        def getEthtoolCmd(self):
            """
            function: get eth tool cmd
            input  : NA
            output : str
            """
            return findCmdInPath('ethtool')
    
        def getTailCmd(self):
            """
            function: get tail cmd
            input  : NA
            output : str
            """
            return findCmdInPath('tail')
    
        def getSshCmd(self, address):
            """
            function: get ssh cmd
            input  : address
            output : str
            """
            return "pssh -s -H " + BLANK_SPACE + address
    
        def getChkconfigCmd(self, OperType, service=""):
            """
            function: get chkconfig cmd
            input  : OperType, service
            output : str
            """
            if OperType == "list":
                return findCmdInPath('chkconfig') + " --list "
            elif OperType == "delete" and service:
                return findCmdInPath('chkconfig') + " --del " + service
    
        def getManageKerberosCmd(self, OperType):
            """
            OperType: init      --init kerberos
                  destory   --destory kerberos
            """
            if OperType == "init":
                return "kinit -k -t "
            elif OperType == "destory":
                return "kdestroy"
    
        def getManageSSDCmd(self):
            """
            function: get manage ssd cmd
            input  : NA
            output : NA
            """
            pass
    
        def getPythonCmd(self):
            """
            function: get python cmd
            input  : NA
            output : str
            """
            return findCmdInPath('python3')
    
        def getShellCmd(self):
            """
            function: get shell cmd
            input  : NA
            output : str
            """
            return findCmdInPath('sh')
    
        def getSourceCmd(self):
            """
            function: get source cmd
            input  : NA
            output : str
            """
            return 'source'
    
        def getTestCmd(self):
            """
            Linux test cmd
            example: test -f /etc/profile && echo 1 || echo 2
            """
            return findCmdInPath("test")
    
        def getPgrepCmd(self):
            """
            Linux pgrep cmd
            """
            return findCmdInPath("pgrep")
    
        def getExportCmd(self, key="", value=""):
            """
            Linux export cmd
            """
            cmd = findCmdInPath("export")
            if key:
                cmd += " %s=%s" % (key, value)
            return cmd
    
    
    class LinuxPlatform(GenericPlatform):
        """
        manage Linux command,config or service for muti-platform
        """
    
        def __init__(self):
            """
            function: constructor
            """
            pass
    
        def dist(self):
            """
            function: dist
            input  : NA
            output : distname, version, id
            """
            return dist()
    
        def getCpuInfoFile(self):
            """
            function: get cpu info file
            input  : NA
            output : str
            """
            return "/proc/cpuinfo"
    
        def getMemInfoFile(self):
            """
            function: get dd cmd
            input  : NA
            output : str
            """
            return "/proc/meminfo"
    
        def getBondInfoPath(self):
            """
            function: get bond info path
            input  : NA
            output : str
            """
            return "/proc/net/bonding/"
    
        def getSysctlFile(self):
            """
            function: get sysctl file
            input  : NA
            output : str
            """
            return "/etc/sysctl.conf"
    
        def getMtablFile(self):
            """
            function: get mtab file
            input  : NA
            output : str
            """
            return "/etc/mtab"
    
        def getInterruptFile(self):
            """
            function: get interrput file
            input  : NA
            output : str
            """
            return "/proc/interrupts"
    
        def getHostsFile(self):
            """
            function: get hostfile
            input  : NA
            output : str
            """
            return "/etc/hosts"
    
        def getName(self):
            """
            function: get name
            input  : NA
            output : str
            """
            return "linux"
    
        def getDefaultLocale(self):
            """
            function: get default locale
            input  : NA
            output : str
            """
            return 'en_US.utf8'
    
        def getDiskFreeCmd(self, Mounted="", inode=False):
            # -P is for POSIX formatting.  Prevents error
            # on lines that would wrap
            return findCmdInPath('df') + " -Pk " + 
                   (" -i " if inode else " -h ") + Mounted
    
        def getDirSizeCmd(self, path, unit=""):
            # -s only shows the total size
            # unit specify the output size unit
            return findCmdInPath('du') + " -s " + (" -B %s " % unit
                                                   if unit else " -h ") + path
    
        def getSadcCmd(self, interval, outFileName):
            """
            function: get sadc cmd
            input  : interval, outFileName
            output : str
            """
            cmd = "/usr/lib64/sa/sadc -F -d " + str(interval) + " " + outFileName
            return cmd
    
        def getCompressFilesCmd(self, tarName, fileSrc):
            """
            function: get compress file cmd
            input  : tarName, fileSrc
            output : str
            """
            cmd = "%s -zvcf '%s' %s" % (self.getTarCmd(), tarName, fileSrc)
            return cmd
    
        def getDecompressFilesCmd(self, srcPackage, dest):
            """
            function: get decompress file cmd
            input  : srcPackage, dest
            output : str
            """
            cmd = "%s -zxvf '%s' -C '%s'" % (self.getTarCmd(), srcPackage, dest)
            return cmd
    
        def getCompressZipFilesCmd(self, zipName, fileSrc):
            """
            function: get compress zip files cmd
            input  : zipName, fileSrc
            output : str
            """
            cmd = "cd %s && %s -r '%s.zip' ./*" % (fileSrc, self.getZipCmd(),
                                                   zipName)
            return cmd
    
        def getDecompressZipFilesCmd(self, srcPackage, dest):
            """
            function: get decompress zip files cmd
            input  : srcPackage, dest
            output : str
            """
            cmd = "%s -o '%s' -d '%s'" % (self.getUnzipCmd(), srcPackage, dest)
            return cmd
    
        def getReplaceFileLineContentCmd(self, oldLine, newLine, path):
            """
            function: get replace file line content cmd
            input  : oldLine, newLine, path
            output : str
            """
            cmd = "%s -i "s/%s/%s/g" '%s'" % (self.getSedCmd(), oldLine,
                                                newLine, path)
            return cmd
    
        def getDirPermissionCmd(self, dirPath):
            """
            function: get dir permission cmd
            input  : dirPath
            output : str
            """
            cmd = "%s -ld '%s' | %s -F" " '{print $1}' " % (self.getListCmd(),
                                                              dirPath,
                                                              self.getAwkCmd())
            return cmd
    
        def getFileSHA256Cmd(self, fileName):
            """
            function: get file sha256 cmd
            input  : fileName
            output : str
            """
            cmd = "%s '%s' | %s -F" " '{print $1}' " % (self.getSHA256Cmd(),
                                                          fileName,
                                                          self.getAwkCmd())
            return cmd
    
        def getExecuteCmdWithUserProfile(self, user, userProfile, executeCmd,
                                         ignoreError=True):
            """
            function: get execute cmd with user profile
            input:  user, userProfile, executeCmd, ignoreError
            output: str
            """
            if (user != "") and (os.getuid() == 0):
                cmd = "su - %s -c '%s %s; %s'" % (user, self.getSourceCmd(),
                                                  userProfile, executeCmd)
            else:
                cmd = "%s %s; %s" % (self.getSourceCmd(), userProfile, executeCmd)
            if ignoreError:
                cmd += " 2>/dev/null"
            return cmd
    
        def getUserHomePath(self):
            """
            function: get user home path
            input:  NA
            output: str
            """
            # converts the relative path to an absolute path
            cmd = "echo ~ 2>/dev/null"
            (status, output) = subprocess.getstatusoutput(cmd)
            if status != 0:
                raise Exception(ErrorCode.GAUSS_502["GAUSS_50219"] % "user home"
                                + "The cmd is %s" % cmd)
            return output
    
        def checkProcAlive(self, procPid):
            """
            function: check Proc alive
            input:  procPid
            output: True/False
            """
            try:
                os.kill(procPid, 0)
            except OSError:
                return False
            else:
                return True
    
        def getIpAddressAndNIC(self, ipType="ipv4"):
            """
            function: get ip address and nic
            input:  ipType
            output: NA
            """
            if ipType == "ipv4":
                key = AF_INET
            else:
                key = AF_INET6
    
            for iface in interfaces():
                if key in ifaddresses(iface):
                    ipAddress = ifaddresses(iface)[key][0]['addr']
                    yield (iface, ipAddress)
    
        def getIpAddressAndNICList(self, ipType="ipv4"):
            """
            function: get ip address and nicList
            input:  ipType
            output: []
            """
            return list(self.getIpAddressAndNIC(ipType))
    
        def getNetworkNumByIPAddr(self, ipAddress, ipType="ipv4"):
            """
            function: get netWork num by IP addr
            input:  ipAddress, ipType
            output: str
            """
            try:
                mappingList = self.getIpAddressAndNICList(ipType)
                for mapInfo in mappingList:
                    if mapInfo[1] == ipAddress:
                        return mapInfo[0]
                raise Exception(ErrorCode.GAUSS_506["GAUSS-50612"] % ipAddress)
            except Exception as e:
                raise Exception(str(e))
    
        def getHostNameByIPAddr(self, ipAddress):
            """
            function: get host name by ip addr
            input:  ipAddress
            output: str
            """
            try:
                return socket.gethostbyaddr(ipAddress)[0]
            except Exception as e:
                raise Exception(str(e))
    
        def getLinuxNetworkConfigFile(self, networkConfPath, networkCardNum):
            """
            function: get linux network config file
            input:  networkConfPath, networkCardNum
            output: str
            """
            try:
                networkConfFile = "%sifcfg-%s" % (networkConfPath, networkCardNum)
                # Network configuration file does not exist
                if not os.path.exists(networkConfFile):
                    cmd = "%s %s -iname 'ifcfg-*-%s' -print" % (self.getFindCmd(),
                                                                networkConfFile,
                                                                networkCardNum)
                    (status, output) = subprocess.getstatusoutput(cmd)
                    if (status != 0 or output.strip() == ""
                            or len(output.split('
    ')) != 1):
                        raise Exception(ErrorCode.GAUSS_502["GAUSS-50201"] %
                                        networkConfFile + "The cmd is %s" % cmd)
                    networkConfFile = output.strip()
                return networkConfFile
            except Exception as e:
                raise Exception(str(e))
    
        def getNetworkBondModeByBondConfigFile(self, bondingConfFile):
            """
            function: get Network Bond Mode By Bond ConfigFile
            input:  bondingConfFile
            output: str
            """
            try:
                # Check the bond mode
                cmd = "%s -w '<Bonding Mode>' %s | %s  -F ':' '{print $NF}'" % (
                    self.getGrepCmd(), bondingConfFile, self.getAwkCmd())
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0:
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
                return "BondMode %s" % output.strip()
            except Exception as e:
                raise Exception(str(e))
    
        def getNetworkBondModeInfo(self, networkConfFile, networkCardNum):
            """
            function: get Network Bond Mode Info
            input: networkConfFile, networkCardNum
            output: str
            """
            # Get the bond profile
            if not os.path.isfile(networkConfFile):
                return "BondMode Null"
    
            bondingConfFile = "%s%s" % (self.getBondInfoPath(), networkCardNum)
            cmd = "%s -i 'BONDING_OPTS|BONDING_MODULE_OPTS' %s" % (
                self.getGrepCmd(), networkConfFile)
            output = subprocess.getstatusoutput(cmd)[1]
            # Analysis results
            if output.strip() != "":
                if (output.find("mode") > 0) and os.path.exists(bondingConfFile):
                    bondInfo = self.getNetworkBondModeByBondConfigFile(
                        bondingConfFile)
                else:
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
            elif os.path.exists(bondingConfFile):
                bondInfo = self.getNetworkBondModeByBondConfigFile(bondingConfFile)
                bondInfo += "
    No 'BONDING_OPTS' or 
                'BONDING_MODULE_OPTS' in bond config file[%s]." % networkConfFile
            else:
                bondInfo = "BondMode Null"
            return bondInfo
    
        def getNetworkMaskByNICNum(self, networkCardNum, ipType="ipv4"):
            """
            function: get Network Mask By NICNum
            input:  networkCardNum, ipType
            output: str
            """
            if ipType == "ipv4":
                return ifaddresses(networkCardNum)[AF_INET][0]["netmask"]
            else:
                return ifaddresses(networkCardNum)[AF_INET6][0]["netmask"]
    
        def getNetworkRXTXValueByNICNum(self, networkCardNum, valueType):
            """
            function: get Network RXTX Value By NICNum
            input:  networkCardNum, valueType
            output: int
            """
            try:
                cmd = "%s -g %s | %s '%s:' | %s -n 1" % (self.getEthtoolCmd(),
                                                         networkCardNum,
                                                         self.getGrepCmd(),
                                                         valueType.upper(),
                                                         self.getTailCmd())
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0:
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
                value = output.split(':')[-1].split(' ')[0].strip()
                if not str(value).isdigit():
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
                return int(value)
            except Exception as e:
                raise Exception(str(e))
    
        def setNetworkRXTXValue(self, networkCardNum, rxValue=8192,
                                txValue=8192):
            """
            function: set Network RXTX Value
            input:  networkCardNum, rxValue, txValue
            output: NA
            """
            try:
                cmd = "%s -G %s rx %s tx %s" % (
                    self.getEthtoolCmd(), networkCardNum, rxValue, txValue)
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0:
                    if output.find("no ring parameters changed, aborting") < 0:
                        raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                        " Error: 
    %s " % output)
            except Exception as e:
                raise Exception(str(e))
    
        def getNetworkSpeedByNICNum(self, networkCardNum):
            """
            function: get Network Speed By NICNum
            input:  networkCardNum
            output: int
            """
            keyWord = "Speed: "
            speedUnit = "Mb/s"
            try:
                cmd = "%s %s | grep '%s'" % (self.getEthtoolCmd(),
                                             networkCardNum, keyWord)
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0 or output == "":
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
                if len(output.split('
    ')) >= 1:
                    for line in output.split('
    '):
                        if line.find(keyWord) >= 0 and line.find(speedUnit) >= 0:
                            return int(line.split(':')[-1].strip()[:-4])
                return 0
            except Exception as e:
                raise Exception(str(e))
    
        def checkNetworkInterruptByNIC(self, networkCardNum):
            """
            function: check Network Interrupt By NIC
            """
            try:
                interruptConfFile = self.getInterruptFile()
                numberedListCmd = "%s %s | %s '%s-' | 
                %s -F ' ' '{print $1}' | %s -F ':' '{print $1}'" % (
                    self.getCatCmd(), interruptConfFile, self.getGrepCmd(),
                    networkCardNum, self.getAwkCmd(), self.getAwkCmd())
                irqCmd = "%s /proc/irq/$i/smp_affinity" % self.getCatCmd()
                cmd = "for i in `%s`; do %s ; done" % (numberedListCmd, irqCmd)
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0:
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
            except Exception as e:
                raise Exception(str(e))
    
            # cpu core number followed by 1 2 4 8,every 4 left shift one
            Mapping = {0: "1", 1: "2", 2: "4", 3: "8"}
            flag = True
            for index, eachLine in enumerate(output.split()):
                # Remove the ','
                eachLine = eachLine.replace(",", "")
                # Replace 0000,00001000 to 1,Remove invalid content
                validValue = eachLine.replace("0", "")
                # Convert the row index to the expected value
                expandNum = Mapping[index % 4]
                # Convert line index to expected position
                expandBit = index // 4 * -1 - 1
                # value and position is correct
                if eachLine[expandBit] == expandNum and validValue == expandNum:
                    continue
                else:
                    print("Network card [%s] multi-queue 
                    support is not enabled.
    " % networkCardNum)
                    flag = False
                    break
            return flag
    
        def getInterruptCountNum(self, networkCardNum):
            """
            function : We can makesure that all dev names is startwith
            'ethX-' and endwith '-X'
            input  : String
            output : Int
            """
            try:
                interruptConfFile = self.getInterruptFile()
                cmd = "%s %s | %s '%s-' | %s -l" % (self.getCatCmd(),
                                                    interruptConfFile,
                                                    self.getGrepCmd(),
                                                    networkCardNum,
                                                    self.getWcCmd())
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0:
                    raise Exception(ErrorCode.GAUSS_506["GAUSS_50622"] % cmd)
                if not str(output.strip()).isdigit():
                    return 0
                return int(output.strip())
            except Exception as e:
                raise Exception(str(e))
    
        def getPackageFile(self, distName, version, packageVersion,
                           productVersion, fileType="tarFile"):
            """
            function : Get the path of binary file version.
            input : distName, version, packageVersion,
                    productVersion, fileType
            output : String
            """
            distname, version, idnum = dist()
            distname = distname.lower()
            dirName = os.path.dirname(os.path.realpath(__file__))
            prefixStr = productVersion
            if fileType == "tarFile":
                postfixStr = "tar.gz"
            elif fileType == "binFile":
                postfixStr = "bin"
            elif fileType == "sha256File":
                postfixStr = "sha256"
            elif  fileType == "bz2File":
                postfixStr = "tar.bz2"
            else:
                raise Exception(ErrorCode.GAUSS_500["GAUSS_50019"] % "fileType")
    
            # RHEL and CentOS have the same kernel version,
            # So RHEL cluster package can run directly on CentOS.
            if distname in REDHAT:
                fileName = os.path.join(dirName, "./../../../",
                                        "%s-%s-%s-%s.%s" % (
                                            prefixStr, packageVersion, PAK_REDHAT,
                                            BIT_VERSION, postfixStr))
            elif distname in CENTOS:
                if os.path.isfile(os.path.join("/etc", "euleros-release")):
                    fileName = os.path.join(dirName, "./../../../",
                                            "%s-%s-%s-%s.%s" % (
                                                prefixStr, packageVersion,
                                                PAK_EULER,
                                                BIT_VERSION, postfixStr))
                    if not os.path.isfile(fileName):
                        fileName = os.path.join(dirName, "./../../../",
                                                "%s-%s-%s-%s.%s" % (
                                                    prefixStr, packageVersion,
                                                    PAK_CENTOS, BIT_VERSION,
                                                    postfixStr))
                else:
                    fileName = os.path.join(dirName, "./../../../",
                                            "%s-%s-%s-%s.%s" % (
                                                prefixStr, packageVersion,
                                                PAK_CENTOS,
                                                BIT_VERSION, postfixStr))
                if not os.path.isfile(fileName):
                    fileName = os.path.join(dirName, "./../../../",
                                            "%s-%s-%s-%s.%s" % (
                                                prefixStr, packageVersion,
                                                PAK_REDHAT,
                                                BIT_VERSION, postfixStr))
            elif distname == SUSE and version.split('.')[0] in ("11", "12"):
                fileName = os.path.join(dirName, "./../../../",
                                        "%s-%s-%s-%s.%s" % (
                                            prefixStr, packageVersion, "SUSE11",
                                            BIT_VERSION, postfixStr))
            elif distname in EULEROS and (idnum in ["SP2", "SP3", "SP5"]):
                fileName = os.path.join(dirName, "./../../../",
                                        "%s-%s-%s-%s.%s" % (
                                            prefixStr, packageVersion, PAK_EULER,
                                            BIT_VERSION, postfixStr))
                if not os.path.isfile(fileName):
                    fileName = os.path.join(dirName, "./../../../",
                                            "%s-%s-%s-%s.%s" % (
                                                prefixStr, packageVersion,
                                                PAK_REDHAT,
                                                BIT_VERSION, postfixStr))
            elif distname in EULEROS and (idnum == "SP8"):
                fileName = os.path.join(dirName, "./../../../",
                                        "%s-%s-%s-%s.%s" % (
                                            prefixStr, packageVersion, PAK_EULER,
                                            BIT_VERSION, postfixStr))
            elif distname in EULEROS:
                fileName = os.path.join(dirName, "./../../../",
                                        "%s-%s-%s-%s.%s" % (
                                            prefixStr, packageVersion, PAK_REDHAT,
                                            BIT_VERSION, postfixStr))
            elif distname in OPENEULER or distname in KYLIN:
                fileName = os.path.join(dirName, "./../../../",
                                        "%s-%s-%s-%s.%s" % (
                                            prefixStr, packageVersion,
                                            PAK_OPENEULER,
                                            BIT_VERSION, postfixStr))
            else:
                raise Exception(ErrorCode.GAUSS_519["GAUSS_51900"] +
                                "Supported platforms are: %s." % str(
                    SUPPORT_WHOLE_PLATFORM_LIST))
    
            fileName = os.path.normpath(fileName)
            if not os.path.exists(fileName):
                raise Exception(ErrorCode.GAUSS_502["GAUSS_50201"] % fileName)
            if not os.path.isfile(fileName):
                raise Exception(ErrorCode.GAUSS_502["GAUSS_50210"] % fileName)
            return fileName
    
        def setKeyValueInSshd(self, key, value):
            """
            function: Set a (key, value) pair into /etc/ssh/sshd_config,
            before "Match" section.
                    "Match" section in sshd_config should always places in the end.
                    Attention: you need to remove the old (key, value)
                    from sshd_config manually.
            input:
                key: the configuration name of sshd_config
                value: the configuration value(Only single line string
                permitted here).
            output:
                void
            """
            sshd_config = '/etc/ssh/sshd_config'
            cmd = "grep -E '^<Match>' %s" % sshd_config
            (status, output) = subprocess.getstatusoutput(cmd)
    
            if status == 0:
                cmd = "sed -i '/^<Match>.*/i %s %s' %s" % (key, value,
                                                             sshd_config)
            else:
                if output is not None and len(output.strip()) != 0:
                    raise Exception(ErrorCode.GAUSS_503["GAUSS_50321"] %
                                    "Match section" + "Command: %s, Error: %s" %
                                    (cmd, output))
                cmd = "echo '' >> %s ; echo '%s %s' >> %s" % (sshd_config,
                                                              key, value,
                                                              sshd_config)
    
            (status, output) = subprocess.getstatusoutput(cmd)
            if status != 0:
                raise Exception((ErrorCode.GAUSS_503["GAUSS_50320"] % (
                    key, value)) + ("Command: %s, Error: %s" % (cmd, output)))
    
    
    class SLESPlatform(LinuxPlatform):
        """
        manage SUSE Linux Enterprise Server command,
        config or service for muti-platform
        """
    
        def __init__(self):
            self.NetWorkConfPath = "/etc/sysconfig/network/"
            self.SuSEReleaseFile = "/etc/SuSE-release"
            self.OSReleaseFile = "/etc/SuSE-release"
    
        def isPlatFormEulerOSOrRHEL7X(self):
            """
            function: the patform is euleros or rhel7x
            input  : NA
            output : bool
            """
            return False
    
        def getManageFirewallCmd(self, action):
            """
            function: get manage firewall cmd
            input  : action
            output : str
            """
            return findCmdInPath('SuSEfirewall2') + BLANK_SPACE + action
    
        def getLinuxFirewallStatus(self):
            """
            function: get Linux Firewall Status
            input:  NA
            output: str
            """
            try:
                cmd = self.getManageFirewallCmd("status")
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0 or output == "":
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
    
                if output.strip().find("SuSEfirewall2 not active") > 0:
                    firewallStatus = "disabled"
                else:
                    firewallStatus = "enabled"
                return firewallStatus
            except Exception as e:
                raise Exception(str(e))
    
        def getManageCrondCmd(self, action):
            """
            function: get manage crond cmd
            input  : action
            output : str
            """
            return self.getServiceCmd("cron", action)
    
        def getManageSshdCmd(self, action):
            """
            function: get manage sshd cmd
            input  : action
            output : str
            """
            return self.getServiceCmd("sshd", action)
    
        def getManageSyslogCmd(self, action):
            """
            function: get manage syslog cmd
            input  : action
            output : str
            """
            return self.getServiceCmd("syslog", action)
    
        def getManageRsyslogCmd(self, action):
            """
            function: get manage rsyslog cmd
            input  : action
            output : str
            """
            return self.getServiceCmd("rsyslog", action)
    
        def getManageSystemdJournaldCmd(self, action):
            """
            function: get systemd-jorunald cmd
            input  : action
            output : str
            """
            return self.getServiceCmd("systemd-journald", action)
    
        def getManageGsOsServerCmd(self, action):
            """
            function: get rhel/centos cmd
            input  : action
            output : NA
            """
            try:
                raise Exception(ErrorCode.GAUSS_530["GAUSS_53021"]
                                % ("gs-OS-set service", "RHEL/CentOS"))
            except Exception as e:
                raise Exception(str(e))
    
        def getCurrentPlatForm(self):
            """
            function: get current platform
            input:  NA
            output: str, str
            """
            try:
                distName, version = dist()[0:2]
                bits = platform.architecture()[0]
                if (distName.lower() != SUSE or
                        version not in SUPPORT_SUSE_VERSION_LIST):
                    raise Exception(ErrorCode.GAUSS_530["GAUSS_53022"]
                                    % (distName.lower(), version))
    
                # os-release is added since SLE 12; SuSE-release will
                # be removed in a future service pack or release
                if os.path.exists(self.SuSEReleaseFile):
                    cmd = "%s -i 'PATCHLEVEL' %s  | " 
                          "%s -F '=' '{print $2}'" % (self.getGrepCmd(),
                                                      self.SuSEReleaseFile,
                                                      self.getAwkCmd())
                else:
                    cmd = "%s -i 'VERSION_ID' %s  | " 
                          "%s -F '.' '{print $2}' | %s 's/"//'" % (
                              self.getGrepCmd(), self.OSReleaseFile,
                              self.getAwkCmd(), self.getSedCmd())
                (status, output) = subprocess.getstatusoutput(cmd)
                if status == 0 and output != "":
                    patchlevel = output.strip()
                else:
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
    
                if (bits == BIT_VERSION and
                        ((version == SUSE11 and
                          patchlevel in SUPPORT_SUSE11X_VERSION_LIST) or
                         (version == SUSE12 and
                          patchlevel in SUPPORT_RHEL12X_VERSION_LIST))):
                    platformVersion = "%s.%s" % (version, patchlevel)
                    return distName.lower(), platformVersion
                else:
                    raise Exception(ErrorCode.GAUSS_519["GAUSS_51900"] +
                                    " The current system is: %s%s.%s" % (
                                        distName.lower(), version, patchlevel))
            except Exception as e:
                raise Exception(str(e))
    
        def getNetworkConfigFileByNICNum(self, networkCardNum):
            """
            function: get Network ConfigFile By NICNum
            input:  networkCardNum
            output: str
            """
            return self.getLinuxNetworkConfigFile(self.NetWorkConfPath,
                                                  networkCardNum)
    
        def getNetworkConfigFileByIPAddr(self, ipAddress):
            """
            function: get Network ConfigFile By ip addr
            input:  ipAddress
            output: str
            """
            networkCardNum = self.getNetworkNumByIPAddr(ipAddress)
            return self.getNetworkConfigFileByNICNum(networkCardNum)
    
    
    class RHELPlatform(LinuxPlatform):
        """
        manage Red Hat Enterprise Linux command,config or service for muti-platform
        """
    
        def __init__(self):
            """
            function: constructor
            """
            self.NetWorkConfPath = "/etc/sysconfig/network-scripts/"
    
        def isSupportSystemctl(self):
            """
            function: isSupportSystemctl
            input:  NA
            output: bool
            """
            distName, version = dist()[0:2]
            if ((distName.lower() == EULEROS and version[0:3] in
                 SUPPORT_EULEROS_VERSION_LIST) or
                    (distName.lower() in SUPPORT_RHEL_SERIES_PLATFORM_LIST and
                     version[0:3] in SUPPORT_RHEL7X_VERSION_LIST) or
                    (distName.lower() == CENTOS and version[0:3] ==
                     SUPPORT_EULEROS_VERSION_LIST and
                     os.path.isfile(os.path.join("/etc", "euleros-release"))) or
                    distName.lower() == OPENEULER):
                return True
            else:
                return False
    
        def isPlatFormEulerOSOrRHEL7X(self):
            """
            function: check is PlatForm EulerOS Or RHEL7X
            """
            return self.isSupportSystemctl()
    
        def getManageFirewallCmd(self, action):
            """
            function: get manage firewall cmd
            input  : action
            output : str
            """
            if self.isSupportSystemctl():
                return self.getSystemctlCmd("firewalld.service", action)
            else:
                return self.getServiceCmd("iptables", action)
    
        def getLinuxFirewallStatus(self):
            """
            function: get Linux Firewall Status
            """
            try:
                cmd = self.getManageFirewallCmd("status")
                (status, output) = subprocess.getstatusoutput(cmd)
                if status != 0 and output == "":
                    raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
                                    " Error: 
    %s " % output)
    
                if self.isSupportSystemctl():
                    if output.strip().find("Active: active (running)") > 0:
                        firewallStatus = "enabled"
                    else:
                        firewallStatus = "disabled"
                else:
                    if output.strip().find("Firewall is not running") > 0:
                        firewallStatus = "disabled"
                    else:
                        firewallStatus = "enabled"
                return firewallStatus
            except Exception as e:
                raise Exception(str(e))
    
        def getManageCrondCmd(self, action):
            """
            function: get crond.server cmd
            input  : action
            output : str
            """
            if self.isSupportSystemctl():
                return self.getSystemctlCmd("crond.service", action)
            else:
                return self.getServiceCmd("crond", action)
    
        def getManageSshdCmd(self, action):
            """
            function: get sshd.server cmd
            input  : action
            output : str
            """
            if self.isSupportSystemctl():
                return self.getSystemctlCmd("sshd.service", action)
            else:
                return self.getServiceCmd("sshd", action)
    
        def getManageGsOsServerCmd(self, action):
            """
            function: get gs-OS-set.service cmd
            input  : action
            output : str
            """
            if self.isSupportSystemctl():
                return self.getSystemctlCmd("gs-OS-set.service", action)
            else:
                return self.getServiceCmd("gs-OS-set", action)
    
        def getManageSyslogCmd(self, action):
            """
            function: get syslog service cmd
            """
            try:
                raise Exception(ErrorCode.GAUSS_530["GAUSS_53021"]
                                % ("Syslog service", "SuSE"))
            except Exception as e:
                raise Exception(str(e))
    
        def getManageRsyslogCmd(self, action):
            """
            function: get syslog cmd
            """
            try:
                raise Exception(ErrorCode.GAUSS_530["GAUSS_53021"]
                                % ("Rsyslog service", "SuSE"))
            except Exception as e:
                raise Exception(str(e))
    
        def getManageSystemdJournaldCmd(self, action):
            """
            function: get systemd journal cmd
            """
            try:
                raise Exception(ErrorCode.GAUSS_530["GAUSS_53021"]
                                % ("systemd-journald", "SuSE"))
            except Exception as e:
                raise Exception(str(e))
    
        def getCurrentPlatForm(self):
            """
            function: get current platform
            """
            try:
                distName, version, currentId = dist()
                bits = platform.architecture()[0]
                if ((bits == BIT_VERSION and
                     ((distName.lower() == EULEROS and version[0:3] in
                       SUPPORT_EULEROS_VERSION_LIST) or
                      (distName.lower() in SUPPORT_RHEL_SERIES_PLATFORM_LIST and
                       version[0:3] in SUPPORT_RHEL_SERIES_VERSION_LIST)) or
                     (distName.lower() == OPENEULER)
                )):
                    return distName.lower(), version[0:3]
                else:
                    if distName.lower() == CENTOS and os.path.isfile(
                            os.path.join("/etc", "euleros-release")) and 
                            (version[0:3] in SUPPORT_EULEROS_VERSION_LIST):
                        return EULEROS, version[0:3]
                    if distName.lower() == EULEROS:
                        raise Exception(ErrorCode.GAUSS_519["GAUSS_51900"] +
                                        " The current system is: %s%s%s" % (
                                            distName.lower(),
                                            version[0:3], currentId))
                    else:
                        raise Exception(ErrorCode.GAUSS_519["GAUSS_51900"] +
                                        " The current system is: %s%s" % (
                                            distName.lower(), version[0:3]))
            except Exception as e:
                raise Exception(str(e))
    
        def getNetworkConfigFileByIPAddr(self, ipAddress):
            """
            function: get Network ConfigFile By IPAddr
            """
            networkCardNum = self.getNetworkNumByIPAddr(ipAddress)
            return self.getLinuxNetworkConfigFile(self.NetWorkConfPath,
                                                  networkCardNum)
    
        def getNetworkConfigFileByNICNum(self, networkCardNum):
            """
            function: get Network ConfigFile By NICNum
            """
            return self.getLinuxNetworkConfigFile(self.NetWorkConfPath,
                                                  networkCardNum)
    
    
    class UserPlatform():
        """
        manage Red Hat Enterprise Linux command,config or service for muti-platform
        """
    
        def __init__(self):
            """
            function : Check support OS version and init OS class
            """
            # now we support this platform:
            #     RHEL/CentOS     "6.4", "6.5", "6.6", "6.7", "6.8", "6.9",
            #     "7.0", "7.1", "7.2", "7.3", "7.4", "7.5 "64bit
            #     EulerOS         "2.0", "2.3" 64bit
            #     SuSE11          sp1/2/3/4 64bit
            #     SuSE12          sp0/1/2/3 64bit
            #     Kylin           "10" 64bit
            distName, version, idNum = dist()
            if distName.lower() not in SUPPORT_WHOLE_PLATFORM_LIST:
                raise Exception(ErrorCode.GAUSS_519["GAUSS_51900"] +
                                "Supported platforms are: %s." % str(
                    SUPPORT_WHOLE_PLATFORM_LIST))
    
            if distName.lower() == SUSE:
                # SuSE11.X SUSE12.X
                self.userPlatform = SLESPlatform()
            elif distName.lower() in SUPPORT_RHEL_SERIES_PLATFORM_LIST:
                # RHEL6.X RHEL7.X
                self.userPlatform = RHELPlatform()
            else:
                # EULEROS 2.0/2.3
                self.userPlatform = RHELPlatform()
            try:
                self.userPlatform.getCurrentPlatForm()
            except Exception as e:
                raise Exception(str(e))
    
    
    # global platform class
    g_Platform = UserPlatform().userPlatform
  • 相关阅读:
    Python 循环语句
    Python if、elif 、else语句 与 布尔运算
    Python 运算符
    Python 标识符
    Python 常用数据类型(整数,浮点数,复数,布尔型)
    Python 编辑器内容
    Python 语言介绍
    vscode 最新中文设置
    漫画数据库_基础和设计数据库
    linux配置服务器
  • 原文地址:https://www.cnblogs.com/lyck/p/13957956.html
Copyright © 2020-2023  润新知