QMT中print内容同时输出到控制台和日志文件

 在QMT中使用print可以打印出执行的日志,但是有时候执行程序时间长,打印的内容比较多,控制台中就要覆盖前面的内容,不能够完整的保留下来做分析,下面示例可以在print到控制台的同时记录到日志文件中。

#encoding:gbk

import pandas as pd
import numpy as np
import talib
import sys
import time

__console__=sys.stdout #控制台引用保存起来
#以下为包装好的Logger类的定义
class Logger(object):
	def __init__(self,filename="Default.log"):
		self.terminal=sys.stdout
		self.log=open(filename,"w",encoding="utf-8") #防止编码错误

	def write(self, message):
		self.terminal.write(message)
		self.log.write(message)

	def flush(self):
		pass

	
t = time.strftime("-%Y%m%d-%H%M%S",time.localtime()) #时间戳
filename = 'd:\stock\log'+t+'.txt'

log=Logger(filename)
sys.stdout=log

def init(ContextInfo):
	ContextInfo.stock_code_list=['000001.SZ']
	ContextInfo.accID='18510385'
	ContextInfo.set_universe(ContextInfo.stock_code_list)
	ContextInfo.set_account(ContextInfo.accID)

	
def handlebar(ContextInfo):
	timetag=ContextInfo.get_bar_timetag(ContextInfo.barpos)
	dt=timetag_to_datetime(timetag,'%Y-%m-%d %H:%M%S')
	print(dt,'-'*30)
	data=ContextInfo.get_market_data(['close'],ContextInfo.stock_code_list,period='1d',count=30)
	print(data)
	if ContextInfo.is_last_bar() or dt[:10]==ContextInfo.end[:10]:
		sys.stdout.log.close()
		sys.stdout=__console__ #恢复输出的控制台引用
		print('abc')


猜你喜欢

转载自blog.csdn.net/pengxuan/article/details/129876754