• 封装linux几个操作


    #!/usr/bin/python
    #coding=gbk
    import os
    import sys
    curPath = os.path.abspath(os.path.dirname(__file__))
    rootPath = os.path.split(curPath)[0]
    sys.path.append(rootPath)
    import subprocess
    import logging
    import os
    import logging.handlers
    import re


    def logger(appName, rootstdout=True, handlerList=None):
    log_fmt = "%(asctime)s --%(name)s-- [%(levelname)s]: %(message)s"
    c_fmt = "%(asctime)s --%(name)s-- %(filename)s.%(funcName)s():line %(lineno)d [%(levelname)s]: %(message)s"
    date_format = "%Y-%m-%d %H:%M:%S %a"
    logging.basicConfig(level=logging.DEBUG,
    format=c_fmt,
    datefmt=date_format,
    )
    levels = []
    if isinstance(handlerList, list):
    if handlerList.__contains__("I") or handlerList.__contains__("Info"):
    levels.append("Info")
    if handlerList.__contains__("D") or handlerList.__contains__("Debug"):
    levels.append("Debug")
    if handlerList.__contains__("E") or handlerList.__contains__("Error"):
    levels.append("Error")
    if handlerList.__contains__("W") or handlerList.__contains__("Warning"):
    levels.append("Warning")
    if levels:
    stamp = "dailylog.log"
    logsdir = os.path.join(os.getcwd(), "logs")
    if os.path.exists(logsdir):
    for p in levels:
    if os.path.exists(os.path.join(logsdir, p)):
    pass
    else:
    os.mkdir(os.path.join(logsdir, p))
    else:
    os.mkdir(logsdir)
    for p in levels:
    os.mkdir(os.path.join(logsdir, p))

    f_dict = {}
    for i in levels:
    filename = os.path.join(logsdir, i, stamp)
    f_dict[i] = filename
    logger = logging.getLogger(appName)

    for k, v in f_dict.items():
    handler = logging.handlers.TimedRotatingFileHandler(filename=v, when='MIDNIGHT', interval=1,
    backupCount=4)
    handler.suffix = "%Y-%m-%d.log"
    handler.extMatch = r"^d{4}-d{2}-d{2}.log$"
    handler.extMatch = re.compile(handler.extMatch)
    h_fmt = logging.Formatter(log_fmt)
    handler.setFormatter(h_fmt)
    if k == "E" or k == "Error":
    handler.setLevel(logging.ERROR)
    elif k == "I" or k == "Info":
    handler.setLevel(logging.INFO)
    elif k == "W" or k == "Warning":
    handler.setLevel(logging.WARNING)
    elif k == "D" or k == "Debug":
    handler.setLevel(logging.DEBUG)
    else:
    raise NameError("check your logLevel Name is corrected or not")
    logger.addHandler(handler)
    logger.propagate = rootstdout
    return logger
    else:
    raise TypeError("check handlerList at least one corrected logLevel in:'Error','Info','Warning','Debug'")
    else:
    raise NameError("handlerList expected type is list but get type {}".format(type(handlerList).__name__))


    log = logger("app", rootstdout=True, handlerList=['I', 'E'])
    """   if check=True then returncode ==0 return stdout normal,  returncode!=0 rasise callProcessError ,check=False nothing to do"""


    def subprocess_run():
    str_shell = 'df -m &&netstat -ntslp|grep 11111'
    CompletedProcessObject = subprocess.run(args=str_shell, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
    stderr=subprocess.PIPE, universal_newlines=True, timeout=10, check=False)
    if CompletedProcessObject:
    code, out, err = CompletedProcessObject.returncode, CompletedProcessObject.stdout, CompletedProcessObject.stderr

    if code == 0:
    if out:
    log.info(out)
    return out
    if err:
    log.error(err)
    return err
    else:
    if code == 1:
    log.error("语法输出对象为空")
    else:
    # log.info(code)
    raise subprocess.CalledProcessError(code, str_shell)


    def run():
    str_shell = 'cd /data/projects/dmp/dmp/bin&&export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH&&./test_index 172.16.144.72:32050 13 aiad_om aiad_om@123'
    sub = subprocess.Popen(args=str_shell, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
    stderr=subprocess.PIPE, universal_newlines=True)
    out, err = sub.communicate()
    # res=sub.stdout.readlines()

    if sub.returncode == 0:
    # log.info("returncode is 0,执行输出正常")
    if out:
    log.info("执行输出正常")
    log.info(out)
    return out
    if err:
    log.error("出现异常")
    log.error(err, exc_info=True)
    else:
    if sub.returncode == 1:
    log.error("执行shell对象结果有空")
    else:
    raise subprocess.CalledProcessError(sub.returncode, str_shell)


    if __name__ == '__main__':
    run()
  • 相关阅读:
    C++重载运算符
    std::vector
    new、delete、动态数组初始化、野指针、解引用、内存池、重载new和delete、内存泄漏等,释放崩溃
    C++匿名函数lambda
    缺少wntdll.pdb
    map、multimap和unordered_map(hash_map)以及unorderd_multimap
    分享一个双击后编辑并AJAX提交保存的脚本
    jquery.cookie.js操作cookie
    MVC获得某个View 或者 PartialView 生成的字符串
    c#中using 和new
  • 原文地址:https://www.cnblogs.com/zhaobobo10/p/10969857.html
Copyright © 2020-2023  润新知