2013-10-19 372 views
1

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

我的意思是这样的:

  • 线程1写下了每一个打印,每一个异常和所有其他输出中成file1.log
  • 线程2写入每个打印,每一个异常和所有其他输出中成file2.log
  • 等等。

所以我在找的是为每个线程排他地设置标准输出。然而,设置stdout只能在全局范围内工作,意味着Thread1和Tread2将始终写入相同的已定义stdout。 我还没有发现如何做到这一点。 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() 

回答

0

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

相关问题