gpt4 book ai didi

python - 从 Python smtplib 捕获调试输出

转载 作者:太空狗 更新时间:2023-10-30 00:06:20 25 4
gpt4 key购买 nike

如何从 Python smtplib 库捕获调试输出?

这是我的测试程序:

import smtplib
s = smtplib.SMTP("mx10.comcast.com")
s.set_debuglevel(1)
s.sendmail("no-such-sender@comcast.com",["no-such-receiver@comcast.com"],"""
from: no-such-sender@comcast.com
to: no-such-receiver@comcast.com
subject: no such message

This message won't be delivered to anybody.
""")

这是输出:

send: 'ehlo dance.local\r\n'
reply: '250-mx10.comcast.com says EHLO to 129.6.220.67:57015\r\n'
reply: '250-SIZE 40000000\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-8BITMIME\r\n'
reply: '250 XXXXXXXA\r\n'
reply: retcode (250); Msg: mx10.comcast.com says EHLO to 129.6.220.67:57015
SIZE 40000000
PIPELINING
ENHANCEDSTATUSCODES
8BITMIME
XXXXXXXA
send: 'mail FROM:<no-such-sender@comcast.com> size=137\r\n'
reply: '250 2.0.0 MAIL FROM accepted\r\n'
reply: retcode (250); Msg: 2.0.0 MAIL FROM accepted
send: 'rcpt TO:<no-such-receiver@comcast.com>\r\n'
reply: '550 5.1.1 Recipient address rejected: {Gateway}\r\n'
reply: retcode (550); Msg: 5.1.1 Recipient address rejected: {Gateway}
send: 'rset\r\n'
reply: '250 2.0.0 RSET OK\r\n'
reply: retcode (250); Msg: 2.0.0 RSET OK
Traceback (most recent call last):
File "/Users/simsong/x.py", line 11, in <module>
""")
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.py", line 742, in sendmail
raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'no-such-receiver@comcast.com': (550, '5.1.1 Recipient address rejected: {Gateway}')}

我想要一个变量的输出,output。具体来说,我想要所有以 send:reply: 开头的行。

最佳答案

这可以通过将 stderr 重定向到一个文件来完成:

import tempfile, smtplib, os, sys

# Find an available file descriptor
t = tempfile.TemporaryFile()
available_fd = t.fileno()
t.close()

# now make a copy of stderr
os.dup2(2,available_fd)

# Now create a new tempfile and make Python's stderr go to that file
t = tempfile.TemporaryFile()
os.dup2(t.fileno(),2)

# Now run the task that logs to stderr
s = smtplib.SMTP("mx10.comcast.com")
s.set_debuglevel(1)
s.sendmail("no-such-sender@comcast.com",["no-such-receiver@comcast.com"],"""
from: no-such-sender@comcast.com
to: no-such-receiver@comcast.com
subject: no such message

This message won't be delivered to anybody.
""")

# Grab the stderr from the temp file
sys.stderr.flush()
t.flush()
t.seek(0)
stderr_output = t.read()
t.close()

# Put back stderr
os.dup2(available_fd,2)
os.close(available_fd)


# Finally, demonstrate that we have the output:
print("STDERR:")
count = 0
for line in stderr_output.decode('utf-8').split("\n"):
count += 1
print("{:3} {}".format(count,line))

关于python - 从 Python smtplib 捕获调试输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com