gpt4 book ai didi

python脚本忽略文件中的换行符

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:25 25 4
gpt4 key购买 nike

以下内容在文件中。我使用 shell 脚本调用 python 脚本。这个 python 脚本发送邮件。但是在邮件内容中我看到如下所示的输出。它全部在一行中。我是什么我做错了

 /usr/bin/python $DIR/sm.py "$message"  "`cat /tmp/alert.txt`"

输入:以下是alert.txt的内容

  Thu Jun 28 14:29:26 IST 2012

Disk usage limit exceeded -Current disk usage is 167G-Configured disk usage is 200HTTPD connections exceeded configured usage limit -Current HTTPD connections is 21-Configured HTTPD connection is 20


========================OTHER INFO==================
Total fds: 8
Socket fds: 0
Other fds: 8
Free memory :Free Memory:183732
Buffered memory Buffered Memory:78224
Cache memory : Cache Memory:579040
Disk usage is 167G
DB connections 1
Network connections 21
CPU Usage: 0.0

输出:

  Thu Jun 28 14:29:26 IST 2012 Disk usage limit exceeded -Current disk usage is 167G-Configured disk usage is 200HTTPD connections exceeded configured usage limit -Current HTTPD connections is 21-Configured HTTPD connection is 20 ========================OTHER INFO================== Total fds: 8 Socket fds: 0 Other fds: 8 Free memory :Free Memory:183732 Buffered memory Buffered Memory:78224 Cache memory : Cache Memory:579040 Disk usage is 167G DB connections 1 Network connections 21 CPU Usage: 0.0

这是 sm.py

import logging
import smtplib
import sys
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart


try:
smaid = qs[0].id
gmailUser = 'no-reply@xxxxxxxxxxx.com'
gmailPassword = '12345'
mailServer = smtplib.SMTP('smtp.gmail.com', 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmailUser, gmailPassword)

to_addr = "xxxxx@xx.com"
subject = sys.argv[1]
body = sys.argv[2]
try:
msg = MIMEMultipart()
msg['From'] = gmailUser
msg['To'] = to_addr
msg["Content-type"] = "text/html"
sub = subject
msg['Subject'] = sub
body = body

msg.attach(MIMEText(body, 'html'))
mailServer.sendmail(gmailUser, to_addr, msg.as_string())
except:
write_exception("send exception")

mailServer.close()
except:
write_exception("send exception1")

最佳答案

如果硬要发送HTML,需要HTML换行:

import cgi
# escape special HTML characters
body = cgi.escape(body)
# use HTML line breaks
body = body.replace("\r\n", "\n").replace("\n", "<br />\n")

但可能您既不需要 Multipart 也不需要 HTML,所以您可以只使用 smtplib.SMTP.sendmail :

headers = (('From', gmailUser), 
('To', to_addr),
('Subject', subject))

# normalize newlines to CR+LF, as required by SMTP
body = body.replace("\r\n", "\n").replace("\n", "\r\n")

msg = '\r\n'.join("%s: %s" % kv for kv in headers) + '\r\n'*2 + body

mailServer.sendmail(gmailUser, [to_addr], msg)

此外,您不应通过命令行提供文件内容,因为命令行是有长度限制的。相反,您应该通过 STDIN 提供文件,如 python ... < /tmp/alert.txt并通过阅读它

import sys
body = sys.stdin.read()

关于python脚本忽略文件中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242588/

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