Can';在python smtpd中找不到stderr打印
我正在使用smtpd及其捕获值错误异常,我在process_消息中引发异常,并将描述打印到stderr,而不是引发错误。 它打印出来的是我用来构造ValueError的字符串 因此,如果我在过程_消息中执行此操作:Can';在python smtpd中找不到stderr打印,python,smtpd,Python,Smtpd,我正在使用smtpd及其捕获值错误异常,我在process_消息中引发异常,并将描述打印到stderr,而不是引发错误。 它打印出来的是我用来构造ValueError的字符串 因此,如果我在过程_消息中执行此操作: raise ValueError("550, This is the error") 我明白了 在控制台上。 我一生都找不到导致打印的代码。是否有任何方法可以覆盖stderr,以便在每次打印某些内容时显示stacktrace,或者找到打印出这些行的代码行 您可以将标准输出流中的一个
raise ValueError("550, This is the error")
我明白了
在控制台上。
我一生都找不到导致打印的代码。是否有任何方法可以覆盖stderr,以便在每次打印某些内容时显示stacktrace,或者找到打印出这些行的代码行 您可以将标准输出流中的一个替换为跟踪
write()调用的内容。
:
请注意,我正在使用
\uu stderr\uu
来避免循环。您甚至没有说它打印出了什么。所以我在我的/usr/lib/python2.7/smtpd.py
文件中找不到那个错误消息。。。但是,如果我在该文件中搜索ValueError,看起来您提供的本地和远程端口的方式是int()无法使用的。请使用数字,而不是服务名称。抱歉,它打印出来的是我构造ValueError时使用的字符串,因此如果我执行ValueError(“550,这是错误”),我看到550,这是控制台上的错误。
550, This is the error
import sys
import traceback
class FileTracer(object):
def __init__(self, out):
self.out = out
def write(self, data):
traceback.print_stack(None, None, sys.__stderr__)
self.out.write(data)
def flush(self):
self.out.flush()
def close(self):
self.out.close()
sys.stderr = FileTracer(sys.stderr)
sys.stderr.write("trigger\n")
sys.stderr.flush()