How to redirect stderr in Python?

前端 未结 10 995
暖寄归人
暖寄归人 2020-11-27 06:19

I would like to log all the output of a Python script. I tried:

import sys

log = []

class writer(object):
    def write(self, data):
        log.append(dat         


        
10条回答
  •  北荒
    北荒 (楼主)
    2020-11-27 07:06

    import sys
    import tkinter
    
    # ********************************************
    
    def mklistenconsswitch(*printf: callable) -> callable:
        def wrapper(*fcs: callable) -> callable:
            def newf(data):
                [prf(data) for prf in fcs]
            return newf
        stdoutw, stderrw = sys.stdout.write, sys.stderr.write
        funcs = [(wrapper(sys.stdout.write, *printf), wrapper(sys.stderr.write, *printf)), (stdoutw, stderrw)]
        def switch():
            sys.stdout.write, sys.stderr.write = dummy = funcs[0]
            funcs[0] = funcs[1]
            funcs[1] = dummy
        return switch
    
    # ********************************************
    
    def datasupplier():
        i = 5.5
        while i > 0:
            yield i
            i -= .5
    
    def testloop():
        print(supplier.__next__())
        svvitch()
        root.after(500, testloop)
    
    root = tkinter.Tk()
    cons = tkinter.Text(root)
    cons.pack(fill='both', expand=True)
    supplier = datasupplier()
    svvitch = mklistenconsswitch(lambda text: cons.insert('end', text))
    testloop()
    root.mainloop()
    

提交回复
热议问题