1

我有几个线程,每个线程都将输出写入标准输出。但是,我想将每个线程的输出重定向到彼此独立的单独文件。

我的意思是:

  • Thread1 将每个打印、每个异常和所有其他输出写入 file1.log
  • Thread2 将每个打印、每个异常和所有其他输出写入 file2.log
  • 等等。

所以我正在寻找的是专门为每个线程设置标准输出。然而,设置标准输出仅在全局范围内有效,这意味着 Thread1 和 Tread2 将始终写入相同的定义标准输出。我还没有发现如何做到这一点。python 日志记录不适合这个,因为我已经检查过了。

我怎样才能做到这一点?

编辑:根据 dbra 的回答,我编写了以下演示日志记录的小程序:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from multiprocessing import Process
import sys

class SubRunner(object):

    def print_something( self, name ):
        print name + ": print something"


class MainRunner(object):

    def __init__(self, name):        
        self.sub_runner = SubRunner()
        self.name = name


    def runme(self,dummy):
        sys.stdout = open('example_' + self.name + ".log", "w")
        self.sub_runner.print_something( self.name )


#Main program
m1 = MainRunner("M1")
m2 = MainRunner("M2")

p1 = Process(target=m1.runme, args=('',) )
p2 = Process(target=m2.runme, args=('',) )

p1.start()
p2.start()

p1.join()
p2.join()
4

2 回答 2

2

线程共享相同的文件描述符表,您不能将标准输出重定向到不同的文件。

相反,它将通过使用多处理而不是线程库来工作,这里是不同 pid 的不同文件的示例

于 2013-10-19T20:47:52.427 回答
0

您创建了一个进程而不是线程,它不共享内存空间。所以你可以简单地在子进程中设置sys.stdout,它永远不会影响其他子进程或主进程。

于 2014-04-15T04:38:20.447 回答