#!/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()