Я пытаюсь заставить моего пи отправлять электронные письма о его IP через Gmail, основываясь на этой ссылке .
Из того, что я прочитал в этой теме Я должен получать строку вывода оболочки в переменной 'output1' при использовании .stdout.decode ().Но в отличие от обычных строк, таких как «Hello World» - которые не показывают ошибки в MIMEText () - MIMEText (output1) показывает следующую ошибку.
Traceback (most recent call last):
File "/home/upload/startup_mail.py", line 24, in <module>
message = MIMEText(output1)
File "/usr/lib/python3.5/email/mime/text.py", line 34, in __init__
_text.encode('us-ascii')
AttributeError: 'CompletedProcess' object has no attribute 'encode'
Может кто-нибудь объяснить, почему на выходе оболочки всегда отсутствует атрибут «закодировать», несмотря на декодированиеэто в 'us-ascii', и как правильно обрабатывать вывод Shell в MIMEText ()?
Исходный код следующим образом:
import subprocess
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import datetime
to = 'xxxx@gmail.com'
user = 'xxx@gmail.com'
us_p = 'xxxx'
smtpserv = smtplib.SMTP('smtp.gmail.com',587)
smtpserv.ehlo()
smtpserv.starttls()
smtpserv.ehlo()
smtpserv.login(user, us_p)
# run command in background console and get output
output1 = subprocess.run(['ip', 'route', 'list'], stdout=subprocess.PIPE)
output1.stdout.decode('us-ascii')
today = datetime.date.today()
msg = MIMEMultipart('alternative')
message = MIMEText(output1)
msg.attach(message)
msg['Subject'] = 'Pi Booted on %s' % today.strftime('%b %d %Y')
smtpserv.sendmail(user, [to], msg.as_string())
smtpserv.quit()