mirror of https://github.com/midoks/mdserver-web
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
3.5 KiB
140 lines
3.5 KiB
# coding:utf-8
|
|
|
|
# ---------------------------------------------------------------------------------
|
|
# MW-Linux面板
|
|
# ---------------------------------------------------------------------------------
|
|
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
|
|
# ---------------------------------------------------------------------------------
|
|
# Author: midoks <midoks@163.com>
|
|
# ---------------------------------------------------------------------------------
|
|
|
|
# ---------------------------------------------------------------------------------
|
|
# 核心方法库
|
|
# ---------------------------------------------------------------------------------
|
|
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import string
|
|
import json
|
|
import hashlib
|
|
import shlex
|
|
import datetime
|
|
import subprocess
|
|
import glob
|
|
import base64
|
|
import re
|
|
|
|
from random import Random
|
|
|
|
def execShell(cmdstring, cwd=None, timeout=None, shell=True):
|
|
|
|
if shell:
|
|
cmdstring_list = cmdstring
|
|
else:
|
|
cmdstring_list = shlex.split(cmdstring)
|
|
if timeout:
|
|
end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
|
|
|
|
sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,
|
|
shell=shell, bufsize=4096, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
|
|
while sub.poll() is None:
|
|
time.sleep(0.1)
|
|
if timeout:
|
|
if end_time <= datetime.datetime.now():
|
|
raise Exception("Timeout:%s" % cmdstring)
|
|
|
|
if sys.version_info[0] == 2:
|
|
return sub.communicate()
|
|
|
|
data = sub.communicate()
|
|
# python3 fix 返回byte数据
|
|
if isinstance(data[0], bytes):
|
|
t1 = str(data[0], encoding='utf-8')
|
|
|
|
if isinstance(data[1], bytes):
|
|
t2 = str(data[1], encoding='utf-8')
|
|
return (t1, t2)
|
|
|
|
|
|
def getTracebackInfo():
|
|
import traceback
|
|
return traceback.format_exc()
|
|
|
|
def getRunDir():
|
|
return os.getcwd()
|
|
|
|
def getRootDir():
|
|
return os.path.dirname(getRunDir())
|
|
|
|
def getPluginDir():
|
|
return getRootDir() + '/plugins'
|
|
|
|
def getPanelDataDir():
|
|
return getRootDir() + '/data'
|
|
|
|
def getMWLogs():
|
|
return getRootDir() + '/logs'
|
|
|
|
def getPanelTmp():
|
|
return getRootDir() + '/tmp'
|
|
|
|
|
|
def getServerDir():
|
|
return getRunDir() + '/server'
|
|
|
|
def getLogsDir():
|
|
return getRunDir() + '/wwwlogs'
|
|
|
|
def getRandomString(length):
|
|
# 取随机字符串
|
|
rnd_str = ''
|
|
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
|
|
chrlen = len(chars) - 1
|
|
random = Random()
|
|
for i in range(length):
|
|
rnd_str += chars[random.randint(0, chrlen)]
|
|
return rnd_str
|
|
|
|
|
|
def getUniqueId():
|
|
"""
|
|
根据时间生成唯一ID
|
|
:return:
|
|
"""
|
|
current_time = datetime.datetime.now()
|
|
str_time = current_time.strftime('%Y%m%d%H%M%S%f')[:-3]
|
|
unique_id = "{0}".format(str_time)
|
|
return unique_id
|
|
|
|
def readFile(filename):
|
|
# 读文件内容
|
|
try:
|
|
fp = open(filename, 'r')
|
|
fBody = fp.read()
|
|
fp.close()
|
|
return fBody
|
|
except Exception as e:
|
|
# print(e)
|
|
return False
|
|
|
|
def writeFile(filename, content, mode='w+'):
|
|
# 写文件内容
|
|
try:
|
|
fp = open(filename, mode)
|
|
fp.write(content)
|
|
fp.close()
|
|
return True
|
|
except Exception as e:
|
|
return False
|
|
|
|
def dbSqitePrefix():
|
|
WIN = sys.platform.startswith('win')
|
|
if WIN: # 如果是 Windows 系统,使用三个斜线
|
|
prefix = 'sqlite:///'
|
|
else: # 否则使用四个斜线
|
|
prefix = 'sqlite:////'
|
|
return prefix
|
|
|
|
|