博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
封装linux几个操作
阅读量:4659 次
发布时间:2019-06-09

本文共 5224 字,大约阅读时间需要 17 分钟。

#!/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]:\n%(message)s"     c_fmt = "%(asctime)s --%(name)s-- %(filename)s.%(funcName)s():line %(lineno)d [%(levelname)s]:\n%(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()

转载于:https://www.cnblogs.com/zhaobobo10/p/10969857.html

你可能感兴趣的文章
嵌入式 Web workers
查看>>
day01 Python 基础知识
查看>>
补充:面试常见的问题之 Java 基础
查看>>
BZOJ5010: [Fjoi2017]矩阵填数
查看>>
数据库---表---完整性约束
查看>>
DevExpress控件库----FlyoutPanel提示控件
查看>>
ThinkPHP Logic层
查看>>
vue scoped 深度作用选择器
查看>>
Python语言和标准库(第七章:文本处理)
查看>>
并发 并行 同步 异步 多线程的区别
查看>>
python学习笔记-25 实例属性和类属性
查看>>
python 单例模式
查看>>
Java知识积累——String引用的判断问题
查看>>
单机版搭建Hadoop环境图文教程详解
查看>>
【LOJ】#2496. 「AHOI / HNOI2018」毒瘤
查看>>
七夕祭【模拟】
查看>>
SQLServer数据库通用访问类
查看>>
SEO优化
查看>>
CSS学习笔记2-2d变换和过渡属性
查看>>
tyvj1148 小船弯弯
查看>>