用于导入类的Python stderr

用于导入类的Python stderr,python,stdout,stderr,Python,Stdout,Stderr,我正在尝试将错误消息通过管道传输到python脚本中的一个文件中。我的大部分工作都很好。当我导入另一个文件时会出现问题,而该文件中存在错误。下面是一个示例(logger.py): 当我运行logger.py时,所有的输出和错误都会转到serverLog.log,除了导入test.py导致的错误 我想知道是否可以在不向test.py添加任何内容的情况下将错误消息从test.py传输到serverLog.log 您应该在以下情况下定义任何模块: sys.stdout=记录器(“stdout”) sy

我正在尝试将错误消息通过管道传输到python脚本中的一个文件中。我的大部分工作都很好。当我导入另一个文件时会出现问题,而该文件中存在错误。下面是一个示例(logger.py):

当我运行logger.py时,所有的输出和错误都会转到serverLog.log,除了导入test.py导致的错误


我想知道是否可以在不向test.py添加任何内容的情况下将错误消息从test.py传输到serverLog.log

您应该在以下情况下定义任何模块: sys.stdout=记录器(“stdout”) sys.stderr=记录器(“stderr”)

结果将是: cat serverLog.log

Traceback (most recent call last):
  File "/root/untitled/x.py", line 16, in <module>
    import test1
  File "/root/untitled/test1.py", line 3, in <module>
    print x
NameError: name 'x' is not defined
回溯(最近一次呼叫最后一次):
文件“/root/untitled/x.py”,第16行,在
导入测试1
文件“/root/untitled/test1.py”,第3行,在
打印x
名称错误:未定义名称“x”
我的代码:

import time
import sys

class Logger(object):
    def __init__(self,outputType):
        self.outputType=outputType;
        self.log = open("serverLog.log", "w")
    def write(self, message):
        self.log = open("serverLog.log", "a")
        self.log.write(message)
        self.log.close()

sys.stdout = Logger("stdout")
sys.stderr = Logger("stderr")

import test1

j=0
while 3<4:
    print "Sdf"
    j=j+1
    if j>4:
        print k
    time.sleep(1)
导入时间
导入系统
类记录器(对象):
定义初始化(自我,输出类型):
self.outputType=输出类型;
self.log=open(“serverLog.log”,“w”)
def写入(自我、消息):
self.log=open(“serverLog.log”、“a”)
self.log.write(消息)
self.log.close()
sys.stdout=记录器(“stdout”)
sys.stderr=记录器(“stderr”)
导入测试1
j=0
34岁:
打印k
时间。睡眠(1)

您应该在以下情况下定义任何模块: sys.stdout=记录器(“stdout”) sys.stderr=记录器(“stderr”)

结果将是: cat serverLog.log

Traceback (most recent call last):
  File "/root/untitled/x.py", line 16, in <module>
    import test1
  File "/root/untitled/test1.py", line 3, in <module>
    print x
NameError: name 'x' is not defined
回溯(最近一次呼叫最后一次):
文件“/root/untitled/x.py”,第16行,在
导入测试1
文件“/root/untitled/test1.py”,第3行,在
打印x
名称错误:未定义名称“x”
我的代码:

import time
import sys

class Logger(object):
    def __init__(self,outputType):
        self.outputType=outputType;
        self.log = open("serverLog.log", "w")
    def write(self, message):
        self.log = open("serverLog.log", "a")
        self.log.write(message)
        self.log.close()

sys.stdout = Logger("stdout")
sys.stderr = Logger("stderr")

import test1

j=0
while 3<4:
    print "Sdf"
    j=j+1
    if j>4:
        print k
    time.sleep(1)
导入时间
导入系统
类记录器(对象):
定义初始化(自我,输出类型):
self.outputType=输出类型;
self.log=open(“serverLog.log”,“w”)
def写入(自我、消息):
self.log=open(“serverLog.log”、“a”)
self.log.write(消息)
self.log.close()
sys.stdout=记录器(“stdout”)
sys.stderr=记录器(“stderr”)
导入测试1
j=0
34岁:
打印k
时间。睡眠(1)

这里的问题是,我认为您认为导入创建了一个新线程。以下是正在执行的代码行:

import time
<all the code in time>
import sys
<all the code in sys>
import test
import time # Now we're in test.py
time.sleep(1)  # We're still in the main thread!
print x
导入时间
导入系统
导入测试
导入时间#现在我们在test.py中
时间。睡眠(1)#我们仍在主线中!
打印x

python解释器随后产生错误。您的记录器代码从未执行过。正如Valeriy所给出的,解决方案是在导入测试之前放入记录器代码。

这里的问题是,我认为导入会创建一个新线程。以下是正在执行的代码行:

import time
<all the code in time>
import sys
<all the code in sys>
import test
import time # Now we're in test.py
time.sleep(1)  # We're still in the main thread!
print x
导入时间
导入系统
导入测试
导入时间#现在我们在test.py中
时间。睡眠(1)#我们仍在主线中!
打印x
python解释器随后产生错误。您的记录器代码从未执行过。正如Valeriy所给出的,解决方案是在导入测试之前放置记录器代码