增加输出日志到文件
This commit is contained in:
@@ -40,6 +40,10 @@ NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音验证码
|
||||
NOTIFICATION_API_APP_CODE = 'your app code'
|
||||
NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号
|
||||
|
||||
# 输出日志到文件
|
||||
OUT_PUT_LOG_TO_FILE_ENABLED = 0
|
||||
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log' # 日志目录
|
||||
|
||||
# 查询任务
|
||||
QUERY_JOBS = [
|
||||
{
|
||||
|
||||
1
main.py
1
main.py
@@ -34,6 +34,7 @@ def test():
|
||||
:return:
|
||||
"""
|
||||
Const.IS_TEST = True
|
||||
config.OUT_PUT_LOG_TO_FILE_ENABLED = False
|
||||
if '--test-notification' in sys.argv or '-n' in sys.argv:
|
||||
Const.IS_TEST_NOTIFICATION = True
|
||||
pass
|
||||
|
||||
@@ -20,6 +20,10 @@ AUTO_CODE_ACCOUNT = {
|
||||
'user': '',
|
||||
'pwd': ''
|
||||
}
|
||||
# 输出日志到文件
|
||||
OUT_PUT_LOG_TO_FILE_ENABLED = 0
|
||||
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log'
|
||||
|
||||
|
||||
SEAT_TYPES = {
|
||||
'特等座': 25,
|
||||
|
||||
@@ -36,7 +36,7 @@ class AuthCode:
|
||||
return position
|
||||
|
||||
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)
|
||||
return self.get_auth_code(self.session)
|
||||
|
||||
@@ -66,7 +66,7 @@ class AuthCode:
|
||||
return True
|
||||
else:
|
||||
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()
|
||||
|
||||
return False
|
||||
|
||||
@@ -3,6 +3,7 @@ import sys
|
||||
|
||||
from py12306.helpers.func import *
|
||||
|
||||
|
||||
class BaseLog:
|
||||
logs = []
|
||||
thread_logs = {}
|
||||
@@ -23,6 +24,17 @@ class BaseLog:
|
||||
@classmethod
|
||||
def flush(cls, sep='\n', end='\n', file=None, exit=False):
|
||||
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:
|
||||
logs = self.quick_log
|
||||
else:
|
||||
@@ -30,7 +42,9 @@ class BaseLog:
|
||||
logs = self.logs
|
||||
else:
|
||||
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:
|
||||
self.quick_log = []
|
||||
else:
|
||||
@@ -38,11 +52,9 @@ class BaseLog:
|
||||
self.logs = []
|
||||
else:
|
||||
if logs: del self.thread_logs[current_thread_id()]
|
||||
if exit:
|
||||
sys.exit()
|
||||
|
||||
@classmethod
|
||||
def add_quick_log(cls, content = ''):
|
||||
def add_quick_log(cls, content=''):
|
||||
self = cls()
|
||||
self.quick_log.append(content)
|
||||
return self
|
||||
|
||||
@@ -37,8 +37,12 @@ class CommonLog(BaseLog):
|
||||
if Const.IS_TEST:
|
||||
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('日志已输出到文件中: {}'.format(config.OUT_PUT_LOG_TO_FILE_PATH))
|
||||
|
||||
self.add_quick_log()
|
||||
self.flush()
|
||||
self.flush(file=False)
|
||||
return self
|
||||
|
||||
@classmethod
|
||||
@@ -49,7 +53,7 @@ class CommonLog(BaseLog):
|
||||
disable = '未开启'
|
||||
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.NOTIFICATION_BY_VOICE_CODE, enable, disable)))
|
||||
self.add_quick_log('查询间隔: {} 秒'.format(config.QUERY_INTERVAL))
|
||||
self.add_quick_log('用户心跳检测间隔: {} 秒'.format(config.USER_HEARTBEAT_INTERVAL))
|
||||
self.add_quick_log()
|
||||
|
||||
@@ -11,7 +11,7 @@ class UserLog(BaseLog):
|
||||
|
||||
MESSAGE_DOWNLAOD_AUTH_CODE_FAIL = '验证码下载失败 错误原因: {} {} 秒后重试'
|
||||
MESSAGE_DOWNLAODING_THE_CODE = '正在下载验证码...'
|
||||
MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {} {} 秒后重试'
|
||||
MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {}'
|
||||
MESSAGE_CODE_AUTH_SUCCESS = '验证码验证成功 开始登录...'
|
||||
MESSAGE_LOGIN_FAIL = '登录失败 错误原因: {}'
|
||||
MESSAGE_LOADED_USER = '正在尝试恢复用户: {}'
|
||||
|
||||
@@ -25,7 +25,7 @@ class User:
|
||||
self.init_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):
|
||||
accounts = config.USER_ACCOUNTS
|
||||
|
||||
Reference in New Issue
Block a user