pull/32/merge
Apex Liu 2017-01-19 21:10:32 +08:00
parent b6e3448792
commit 43651ea004
6 changed files with 117 additions and 109 deletions

1
.gitignore vendored
View File

@ -62,3 +62,4 @@ __pycache__
/external/libssh-win-static/lib /external/libssh-win-static/lib
/server/share/log /server/share/log
/config.ini /config.ini
/build.bat

View File

@ -1,5 +1,11 @@
@echo off @echo off
SET PYEXEC=C:\Python\Python34-x86\python.exe rem ============================================
rem 请调整以下路径,以适配您自己的的系统环境。
rem 注意必须使用Pyhont 3.432位版本
rem ============================================
SET PYEXEC=C:\Program Files\Python\python.exe
%PYEXEC% -B build/build.py %1 %2 %3 %4 %5 %PYEXEC% -B build/build.py %1 %2 %3 %4 %5

View File

@ -113,13 +113,9 @@ def main():
def clean_all(): def clean_all():
cc.v('remove compiler out path...') cc.v('remove compiler out path...')
utils.remove(os.path.join(ROOT_PATH, 'out')) utils.remove(os.path.join(ROOT_PATH, 'out'))
utils.remove(os.path.join(ROOT_PATH, 'waf_build'))
utils.remove(os.path.join(ROOT_PATH, '.lock-waf_linux_build'))
def do_opt(opt): def do_opt(opt):
cc.v(opt)
arg = '' arg = ''
if 'ver' == opt['name']: if 'ver' == opt['name']:
@ -239,7 +235,6 @@ def show_logo():
def show_menu(): def show_menu():
# cc.v(cfg)
cc.v('') cc.v('')
cc.v('=========================================================') cc.v('=========================================================')
for o in range(len(options)): for o in range(len(options)):

View File

@ -30,7 +30,7 @@ class BuilderWin(BuilderBase):
super().__init__() super().__init__()
def build_exe(self): def build_exe(self):
cc.n('build tp_assist...') cc.i('build tp_assist...')
sln_file = os.path.join(ROOT_PATH, 'client', 'tp_assist', 'tp_assist.vs2015.sln') sln_file = os.path.join(ROOT_PATH, 'client', 'tp_assist', 'tp_assist.vs2015.sln')
out_file = os.path.join(ROOT_PATH, 'out', 'client', ctx.bits_path, ctx.target_path, 'tp_assist.exe') out_file = os.path.join(ROOT_PATH, 'out', 'client', ctx.bits_path, ctx.target_path, 'tp_assist.exe')
if os.path.exists(out_file): if os.path.exists(out_file):
@ -48,7 +48,7 @@ class BuilderWin(BuilderBase):
# utils.ensure_file_exists(out_file) # utils.ensure_file_exists(out_file)
def build_installer(self): def build_installer(self):
cc.n('build assist package for website...') cc.i('build assist package for website...')
name = 'teleport-assist-windows-{}-{}'.format(ctx.bits_path, VER_TELEPORT_ASSIST) name = 'teleport-assist-windows-{}-{}'.format(ctx.bits_path, VER_TELEPORT_ASSIST)
utils.remove(os.path.join(ROOT_PATH, 'dist', '{}.zip'.format(name))) utils.remove(os.path.join(ROOT_PATH, 'dist', '{}.zip'.format(name)))

View File

@ -306,7 +306,8 @@ def sys_exec(cmd, direct_output=False, output_codec=None):
if direct_output: if direct_output:
# cc.v(line.decode(output_codec)) # cc.v(line.decode(output_codec))
cc.v(line, end='') # cc.d(line, end='')
cc.o((cc.CR_GRAY, line), end='')
output += line output += line

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os
import platform
import atexit import atexit
import sys import sys
import threading import threading
@ -114,12 +116,6 @@ class EomLogger:
else: else:
self._do_log = self._do_log_local self._do_log = self._do_log_local
# self.d = self._log_debug
# self.v = self._log_verbose
# self.i = self._log_info
# self.w = self._log_warn
# self.e = self._log_error
self._set_console(True) self._set_console(True)
self._set_level(self._min_level) self._set_level(self._min_level)
@ -187,33 +183,56 @@ class EomLogger:
def _set_console(self, is_enabled): def _set_console(self, is_enabled):
if not is_enabled: if not is_enabled:
self._log_console = self._func_pass self._log_console = self._log_pass
return return
if sys.platform == 'linux' or sys.platform == 'darwin': # if sys.platform == 'linux' or sys.platform == 'darwin':
self._log_console = self._console_linux # self._log_console = self._console_linux
elif sys.platform == 'win32': # elif sys.platform == 'win32':
#
# if sys.stdout is None:
# self._dbg_view = Win32DebugView()
# if self._dbg_view.available():
# self._log_console = self._dbg_view.output
#
# self.log('use DebugView as logger output.\n')
# # self._log_console = self._func_pass
#
#
# else:
# # if 'TERM' in os.environ and 'emacs' != os.environ['TERM']:
# # self._log_console = self._console_linux
#
# # self._win_color = Win32ColorConsole()
# # if self._win_color.available():
# # self._log_console = self._console_win
# # else:
# # self._log_console = self._console_linux
#
# self._log_console = self._console_linux
if sys.stdout is None: # python2.7 on Ubuntu, sys.platform is 'linux2', so we use platform.system() instead.
self._dbg_view = Win32DebugView()
if self._dbg_view.available():
self._log_console = self._dbg_view.output
self.log('use DebugView as logger output.\n') _platform = platform.system().lower()
# self._log_console = self._func_pass
if _platform == 'linux' or _platform == 'darwin':
self._console_set_color = self._console_set_color_linux
self._console_restore_color = self._console_restore_color_linux
elif _platform == 'windows':
# print(os.environ)
if 'TERM' in os.environ and os.environ['TERM'] in ['xterm', 'emacs']:
self._console_set_color = self._console_set_color_linux
self._console_restore_color = self._console_restore_color_linux
else: else:
# if 'TERM' in os.environ and 'emacs' != os.environ['TERM']: self._win_color = Win32ColorConsole()
# self._log_console = self._console_linux if self._win_color.available():
self._console_set_color = self._console_set_color_win
self._console_restore_color = self._console_restore_color_win
# self._win_color = Win32ColorConsole() else:
# if self._win_color.available(): self._console_set_color = self._log_pass
# self._log_console = self._console_win self._console_restore_color = self._log_pass
# else:
# self._log_console = self._console_linux
self._log_console = self._console_linux
def _set_filename(self, base_filename): def _set_filename(self, base_filename):
@ -241,19 +260,51 @@ class EomLogger:
pass pass
def _log_debug(self, *args, **kwargs): def _log_debug(self, *args, **kwargs):
self._console_set_color(CR_DEBUG)
self._do_log(LOG_DEBUG, *args, **kwargs) self._do_log(LOG_DEBUG, *args, **kwargs)
self._console_restore_color()
def _log_verbose(self, *args, **kwargs): def _log_verbose(self, *args, **kwargs):
self._console_set_color(CR_VERBOSE)
self._do_log(LOG_VERBOSE, *args, **kwargs) self._do_log(LOG_VERBOSE, *args, **kwargs)
self._console_restore_color()
def _log_info(self, *args, **kwargs): def _log_info(self, *args, **kwargs):
self._console_set_color(CR_INFO)
self._do_log(LOG_INFO, *args, **kwargs) self._do_log(LOG_INFO, *args, **kwargs)
self._console_restore_color()
def _log_warn(self, *args, **kwargs): def _log_warn(self, *args, **kwargs):
self._console_set_color(CR_WARN)
self._do_log(LOG_WARN, *args, **kwargs) self._do_log(LOG_WARN, *args, **kwargs)
self._console_restore_color()
def _log_error(self, *args, **kwargs): def _log_error(self, *args, **kwargs):
self._do_log(LOG_ERROR, *args, **kwargs) self._console_set_color(CR_ERROR)
# self._do_log(LOG_ERROR, *args, **kwargs)
self._do_log(LOG_ERROR, '[ERROR] ', *args, **kwargs)
if self._trace_error == TRACE_ERROR_NONE:
return
s = traceback.extract_stack()
c = len(s)
for i in range(c - 1):
if i >= self._trace_error:
break
if s[c - 2 - i][0].startswith('<frozen '):
continue
self._do_log(LOG_ERROR, ' %s(%d)\n' % (s[c - 2 - i][0], s[c - 2 - i][1]))
_type, _value, _tb = sys.exc_info()
if _type is not None:
x = traceback.format_exception_only(_type, _value)
self._do_log(LOG_ERROR, '[EXCEPTION] %s' % x[0])
x = traceback.extract_tb(_tb)
self._do_log(LOG_ERROR, ' %s(%d): %s\n' % (x[-1][0], x[-1][1], x[-1][3]))
self._console_restore_color()
def _do_log_tpweb(self, level, *args, **kwargs): def _do_log_tpweb(self, level, *args, **kwargs):
# sep = kwargs['sep'] if 'sep' in kwargs else self._sep # sep = kwargs['sep'] if 'sep' in kwargs else self._sep
@ -294,58 +345,28 @@ class EomLogger:
sys.stdout.writelines(x.__str__()) sys.stdout.writelines(x.__str__())
# sys.stdout.writelines(end) # sys.stdout.writelines(end)
# sys.stdout.flush()
def _console_set_color_win(self, cr=None):
if cr is None:
return
self._win_color.set_color(COLORS[cr][1])
sys.stdout.flush() sys.stdout.flush()
def log(self, msg, color=None): def _console_set_color_linux(self, cr=None):
""" if cr is None:
自行指定颜色输出到控制台不会输出到日志文件且输出时不含时间信息
"""
self._do_log(msg, color=color, show_datetime=False)
# def _func_pass(self, msg, color=None):
# # do nothing.
# pass
#
# def _func_debug(self, msg):
# # 调试输出的数据,在正常运行中不会输出
# self._do_log(msg, CR_DEBUG)
# # 普通的日志数据
# def _func_verbose(self, msg):
# # pass
# self._do_log(msg, None)
#
# # 重要信息
# def _func_info(self, msg):
# self._do_log(msg, CR_INFO)
#
# # 警告
# def _func_warn(self, msg):
# self._do_log(msg, CR_WARN)
#
def _func_error(self, msg):
"""错误
"""
self._do_log('[ERROR] %s' % msg, CR_ERROR)
if self._trace_error == TRACE_ERROR_NONE:
return return
sys.stdout.writelines('\x1B')
sys.stdout.writelines(COLORS[cr][0])
sys.stdout.flush()
s = traceback.extract_stack() def _console_restore_color_win(self):
c = len(s) self._win_color.set_color(COLORS[CR_NORMAL][1])
for i in range(c - 1): sys.stdout.flush()
if i >= self._trace_error:
break
if s[c - 2 - i][0].startswith('<frozen '):
continue
self._do_log(' %s(%d)\n' % (s[c - 2 - i][0], s[c - 2 - i][1]), CR_RED)
_type, _value, _tb = sys.exc_info() def _console_restore_color_linux(self):
if _type is not None: sys.stdout.writelines('\x1B[0m')
x = traceback.format_exception_only(_type, _value) sys.stdout.flush()
self._do_log('[EXCEPTION] %s' % x[0], CR_ERROR)
x = traceback.extract_tb(_tb)
self._do_log(' %s(%d): %s\n' % (x[-1][0], x[-1][1], x[-1][3]), CR_RED)
def bin(self, msg, data): def bin(self, msg, data):
# 二进制日志格式一行16字节数据 # 二进制日志格式一行16字节数据
@ -393,7 +414,7 @@ class EomLogger:
m += '.' m += '.'
m += '\n' m += '\n'
self._log_debug(m) self.d(m)
if loop > 0: if loop > 0:
x += 1 x += 1
@ -420,7 +441,7 @@ class EomLogger:
m += '.' m += '.'
m += '\n' m += '\n'
self._log_debug(m) self.d(m)
# def _do_log(self, msg, color=None, show_datetime=True): # def _do_log(self, msg, color=None, show_datetime=True):
# with self._locker: # with self._locker:
@ -531,19 +552,19 @@ class EomLogger:
first = True first = True
for x in args: for x in args:
if not first: if not first:
log._do_log(sep, show_datetime=show_datetime) log._do_log(LOG_VERBOSE, sep, show_datetime=show_datetime)
first = False first = False
if isinstance(x, str): if isinstance(x, str):
log._do_log(x, show_datetime=show_datetime) log._do_log(LOG_VERBOSE, x, show_datetime=show_datetime)
show_datetime = False show_datetime = False
continue continue
else: else:
log._do_log(x.__str__(), show_datetime=show_datetime) log._do_log(LOG_VERBOSE, x.__str__(), show_datetime=show_datetime)
show_datetime = False show_datetime = False
log._do_log(end, show_datetime=show_datetime) log._do_log(LOG_VERBOSE, end, show_datetime=show_datetime)
# s = traceback.extract_stack() # s = traceback.extract_stack()
# c = len(s) # c = len(s)
@ -575,23 +596,6 @@ class EomLogger:
self.bin('This is string\n\n', 'data') self.bin('This is string\n\n', 'data')
class Win32DebugView:
def __init__(self):
from ctypes import WINFUNCTYPE, windll
from ctypes.wintypes import LPCSTR, LPVOID
self._OutputDebugStringA = WINFUNCTYPE(LPVOID, LPCSTR)(("OutputDebugStringA", windll.kernel32))
def available(self):
if self._OutputDebugStringA is None:
return False
else:
return True
def output(self, msg, color=None):
self._OutputDebugStringA(msg.encode('gbk'))
class Win32ColorConsole: class Win32ColorConsole:
def __init__(self): def __init__(self):
from ctypes import WINFUNCTYPE, windll from ctypes import WINFUNCTYPE, windll
@ -659,7 +663,8 @@ class Win32ColorConsole:
log = EomLogger() log = EomLogger()
del EomLogger del EomLogger
log._test() # log._test()
# print('test built-in `print` function.')
import builtins import builtins