封装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]:\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()
posted @ 2019-06-03 20:27  从学习到放弃  阅读(469)  评论(0编辑  收藏  举报