我有几个线程,每个线程将输出写入stdout。但是,我想将每个线程的输出重定向到彼此独立的单独文件。
我的意思如下:
所以我正在寻找的是为每个线程专门设置stdout。但是,设置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 :(得分:1)
线程共享相同的文件描述符表,不能将stdout重定向到不同的文件。
相反,它可以使用multiprocessing代替threading库,here an example of different file for different pid。
答案 1 :(得分:0)
您创建了一个进程而不是一个共享没有内存空间的线程。 所以你可以简单地在子进程中设置sys.stdout,它永远不会影响其他子进程或主进程。