增加输出日志到文件
This commit is contained in:
@@ -40,6 +40,10 @@ NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音验证码
|
|||||||
NOTIFICATION_API_APP_CODE = 'your app code'
|
NOTIFICATION_API_APP_CODE = 'your app code'
|
||||||
NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号
|
NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号
|
||||||
|
|
||||||
|
# 输出日志到文件
|
||||||
|
OUT_PUT_LOG_TO_FILE_ENABLED = 0
|
||||||
|
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log' # 日志目录
|
||||||
|
|
||||||
# 查询任务
|
# 查询任务
|
||||||
QUERY_JOBS = [
|
QUERY_JOBS = [
|
||||||
{
|
{
|
||||||
|
|||||||
1
main.py
1
main.py
@@ -34,6 +34,7 @@ def test():
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
Const.IS_TEST = True
|
Const.IS_TEST = True
|
||||||
|
config.OUT_PUT_LOG_TO_FILE_ENABLED = False
|
||||||
if '--test-notification' in sys.argv or '-n' in sys.argv:
|
if '--test-notification' in sys.argv or '-n' in sys.argv:
|
||||||
Const.IS_TEST_NOTIFICATION = True
|
Const.IS_TEST_NOTIFICATION = True
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ AUTO_CODE_ACCOUNT = {
|
|||||||
'user': '',
|
'user': '',
|
||||||
'pwd': ''
|
'pwd': ''
|
||||||
}
|
}
|
||||||
|
# 输出日志到文件
|
||||||
|
OUT_PUT_LOG_TO_FILE_ENABLED = 0
|
||||||
|
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log'
|
||||||
|
|
||||||
|
|
||||||
SEAT_TYPES = {
|
SEAT_TYPES = {
|
||||||
'特等座': 25,
|
'特等座': 25,
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class AuthCode:
|
|||||||
return position
|
return position
|
||||||
|
|
||||||
def retry_get_auth_code(self): # TODO 安全次数检测
|
def retry_get_auth_code(self): # TODO 安全次数检测
|
||||||
CommonLog.add_quick_log(CommonLog.MESSAGE_RETRY_AUTH_CODE.format(self.retry_time))
|
CommonLog.add_quick_log(CommonLog.MESSAGE_RETRY_AUTH_CODE.format(self.retry_time)).flush()
|
||||||
time.sleep(self.retry_time)
|
time.sleep(self.retry_time)
|
||||||
return self.get_auth_code(self.session)
|
return self.get_auth_code(self.session)
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ class AuthCode:
|
|||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
UserLog.add_quick_log(
|
UserLog.add_quick_log(
|
||||||
UserLog.MESSAGE_CODE_AUTH_FAIL.format(result.get('result_message'), self.retry_time)).flush()
|
UserLog.MESSAGE_CODE_AUTH_FAIL.format(result.get('result_message'))).flush()
|
||||||
self.session.cookies.clear_session_cookies()
|
self.session.cookies.clear_session_cookies()
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import sys
|
|||||||
|
|
||||||
from py12306.helpers.func import *
|
from py12306.helpers.func import *
|
||||||
|
|
||||||
|
|
||||||
class BaseLog:
|
class BaseLog:
|
||||||
logs = []
|
logs = []
|
||||||
thread_logs = {}
|
thread_logs = {}
|
||||||
@@ -23,6 +24,17 @@ class BaseLog:
|
|||||||
@classmethod
|
@classmethod
|
||||||
def flush(cls, sep='\n', end='\n', file=None, exit=False):
|
def flush(cls, sep='\n', end='\n', file=None, exit=False):
|
||||||
self = cls()
|
self = cls()
|
||||||
|
logs = self.get_logs()
|
||||||
|
# 输出到文件
|
||||||
|
if file == None and config.OUT_PUT_LOG_TO_FILE_ENABLED: # TODO 文件无法写入友好提示
|
||||||
|
file = open(config.OUT_PUT_LOG_TO_FILE_PATH, 'a')
|
||||||
|
if not file: file = None
|
||||||
|
print(*logs, sep=sep, end=end, file=file)
|
||||||
|
self.empty_logs(logs)
|
||||||
|
if exit:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
def get_logs(self):
|
||||||
if self.quick_log:
|
if self.quick_log:
|
||||||
logs = self.quick_log
|
logs = self.quick_log
|
||||||
else:
|
else:
|
||||||
@@ -30,7 +42,9 @@ class BaseLog:
|
|||||||
logs = self.logs
|
logs = self.logs
|
||||||
else:
|
else:
|
||||||
logs = self.thread_logs.get(current_thread_id())
|
logs = self.thread_logs.get(current_thread_id())
|
||||||
print(*logs, sep=sep, end=end, file=file)
|
return logs
|
||||||
|
|
||||||
|
def empty_logs(self, logs):
|
||||||
if self.quick_log:
|
if self.quick_log:
|
||||||
self.quick_log = []
|
self.quick_log = []
|
||||||
else:
|
else:
|
||||||
@@ -38,8 +52,6 @@ class BaseLog:
|
|||||||
self.logs = []
|
self.logs = []
|
||||||
else:
|
else:
|
||||||
if logs: del self.thread_logs[current_thread_id()]
|
if logs: del self.thread_logs[current_thread_id()]
|
||||||
if exit:
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def add_quick_log(cls, content=''):
|
def add_quick_log(cls, content=''):
|
||||||
|
|||||||
@@ -37,8 +37,12 @@ class CommonLog(BaseLog):
|
|||||||
if Const.IS_TEST:
|
if Const.IS_TEST:
|
||||||
self.add_quick_log()
|
self.add_quick_log()
|
||||||
self.add_quick_log('当前为测试模式,程序运行完成后自动结束')
|
self.add_quick_log('当前为测试模式,程序运行完成后自动结束')
|
||||||
|
if not Const.IS_TEST and config.OUT_PUT_LOG_TO_FILE_ENABLED:
|
||||||
self.add_quick_log()
|
self.add_quick_log()
|
||||||
self.flush()
|
self.add_quick_log('日志已输出到文件中: {}'.format(config.OUT_PUT_LOG_TO_FILE_PATH))
|
||||||
|
|
||||||
|
self.add_quick_log()
|
||||||
|
self.flush(file=False)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -49,7 +53,7 @@ class CommonLog(BaseLog):
|
|||||||
disable = '未开启'
|
disable = '未开启'
|
||||||
self.add_quick_log('**** 当前配置 ****')
|
self.add_quick_log('**** 当前配置 ****')
|
||||||
self.add_quick_log('多线程查询: {}'.format(get_true_false_text(config.QUERY_JOB_THREAD_ENABLED, enable, disable)))
|
self.add_quick_log('多线程查询: {}'.format(get_true_false_text(config.QUERY_JOB_THREAD_ENABLED, enable, disable)))
|
||||||
self.add_quick_log('语音验证码: {}'.format(get_true_false_text(config.QUERY_JOB_THREAD_ENABLED, enable, disable)))
|
self.add_quick_log('语音验证码: {}'.format(get_true_false_text(config.NOTIFICATION_BY_VOICE_CODE, enable, disable)))
|
||||||
self.add_quick_log('查询间隔: {} 秒'.format(config.QUERY_INTERVAL))
|
self.add_quick_log('查询间隔: {} 秒'.format(config.QUERY_INTERVAL))
|
||||||
self.add_quick_log('用户心跳检测间隔: {} 秒'.format(config.USER_HEARTBEAT_INTERVAL))
|
self.add_quick_log('用户心跳检测间隔: {} 秒'.format(config.USER_HEARTBEAT_INTERVAL))
|
||||||
self.add_quick_log()
|
self.add_quick_log()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class UserLog(BaseLog):
|
|||||||
|
|
||||||
MESSAGE_DOWNLAOD_AUTH_CODE_FAIL = '验证码下载失败 错误原因: {} {} 秒后重试'
|
MESSAGE_DOWNLAOD_AUTH_CODE_FAIL = '验证码下载失败 错误原因: {} {} 秒后重试'
|
||||||
MESSAGE_DOWNLAODING_THE_CODE = '正在下载验证码...'
|
MESSAGE_DOWNLAODING_THE_CODE = '正在下载验证码...'
|
||||||
MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {} {} 秒后重试'
|
MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {}'
|
||||||
MESSAGE_CODE_AUTH_SUCCESS = '验证码验证成功 开始登录...'
|
MESSAGE_CODE_AUTH_SUCCESS = '验证码验证成功 开始登录...'
|
||||||
MESSAGE_LOGIN_FAIL = '登录失败 错误原因: {}'
|
MESSAGE_LOGIN_FAIL = '登录失败 错误原因: {}'
|
||||||
MESSAGE_LOADED_USER = '正在尝试恢复用户: {}'
|
MESSAGE_LOADED_USER = '正在尝试恢复用户: {}'
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class User:
|
|||||||
self.init_users()
|
self.init_users()
|
||||||
UserLog.print_init_users(users=self.users)
|
UserLog.print_init_users(users=self.users)
|
||||||
# 多线程维护用户
|
# 多线程维护用户
|
||||||
create_thread_and_run(jobs=self.users, callback_name='run', wait=False)
|
create_thread_and_run(jobs=self.users, callback_name='run', wait=Const.IS_TEST)
|
||||||
|
|
||||||
def init_users(self):
|
def init_users(self):
|
||||||
accounts = config.USER_ACCOUNTS
|
accounts = config.USER_ACCOUNTS
|
||||||
|
|||||||
Reference in New Issue
Block a user