Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';在python smtpd中找不到stderr打印_Python_Smtpd - Fatal编程技术网

Can';在python smtpd中找不到stderr打印

Can';在python smtpd中找不到stderr打印,python,smtpd,Python,Smtpd,我正在使用smtpd及其捕获值错误异常,我在process_消息中引发异常,并将描述打印到stderr,而不是引发错误。 它打印出来的是我用来构造ValueError的字符串 因此,如果我在过程_消息中执行此操作: raise ValueError("550, This is the error") 我明白了 在控制台上。 我一生都找不到导致打印的代码。是否有任何方法可以覆盖stderr,以便在每次打印某些内容时显示stacktrace,或者找到打印出这些行的代码行 您可以将标准输出流中的一个

我正在使用smtpd及其捕获值错误异常,我在process_消息中引发异常,并将描述打印到stderr,而不是引发错误。 它打印出来的是我用来构造ValueError的字符串

因此,如果我在过程_消息中执行此操作:

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()