zoukankan      html  css  js  c++  java
  • 输出重定向工具

    main主体

    import time
    import sys
    from test.utils import TraceLog


    class Server(object):
    def printLog(self):
    print("start server")
    for i in range(10):
    print(i)
    time.sleep(0.1)
    print("end server ")


    if __name__ == '__main__':
    traceLog = TraceLog("main.log")
    traceLog.start()
    sys.stdout = traceLog
    sys.stderr = traceLog
    server = Server()
    server.printLog()


    # 每当调用print的时候,底层就是在代用sys.stdout.write(str)
    # sys.stdout.write() = traceLog.write()

    utils工具

    '''
    不断记录服务端输入的日志
    实现 >> 和 > 功能
    '''


    import codecs
    from threading import Thread, Lock
    import os

    class TraceLog(Thread):
    def __init__(self, logName):
    # super().__init__() #python3的调用父类的方法,python2用的是super(Class, self).xxx,也是等价于Thread.__init__(self)
    Thread.__init__(self)
    self.logName = logName
    self.lock = Lock()
    self.contexts = []

    def isFile(self):
    if not os.path.exists(self.logName):
    with codecs.open(self.logName, 'w') as f:
    f.write("this log name is: {0} ".format(self.logName))
    f.write("start log ")

    def write(self, context):
    self.contexts.append(context)

    def run(self):
    while 1:
    # self.lock.acquire()
    if len(self.contexts) != 0:
    with codecs.open(self.logName, "a") as f:
    for context in self.contexts:
    f.write(context)
    del self.contexts[:] # 注意不能忘记清空
    # self.lock.release()
  • 相关阅读:
    理解CSS中BFC
    js 异步执行顺序
    javascript中继承方式及优缺点(三)
    javascript中继承方式及优缺点(二)
    javascript中继承方式及优缺点(一)
    javascript中的原型和原型链(五)
    javascript中的原型和原型链(四)
    javascript中的原型和原型链(三)
    跨域问题及解决思路
    lambda表达式之方法引用
  • 原文地址:https://www.cnblogs.com/Jweiqing/p/9095595.html
Copyright © 2011-2022 走看看