2013-10-19 213 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,這永遠不會影響其他子進程或主進程。

相關問題