[英]Ignoring variable in Python multiline string
我正在使用多行字符串中的Python腳本轉發HTML電子郵件。 它需要讀取4個外部給定的變量(有效)。 但是有一個mail:to鏈接使用%20和%40。 我正在使用%s來引用其他對象。 當我嘗試執行腳本時,出現以下錯誤:
TypeError:%o格式:必須為數字,而不是str
據我了解,因為它希望%20和%40也會引用變量。 我確實想包括mail:to鏈接,但是我似乎無法使Python忽略這些值。
#!/usr/bin/env python
list1=[0,1,2,3,4];
import mimetypes, os, smtplib, sys,
from email import encoders
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
from email.utils import make_msgid
me = "xx@yy.nl"
you = "yy@xx.nl"
DESTINATION=sys.argv[1]
SUBJECT=sys.argv[2]
MESSAGE=sys.argv[3]
PASS='password'
SRVSMTP='mysmtpserv:587'
msg = MIMEMultipart('alternative')
msg['Subject'] = SUBJECT
msg['From'] = me
msg['To'] = you
msg['Date'] = formatdate()
msg['Message-ID'] = make_msgid()
sys.argv[3].split(";")
hostnam, trgname, trgstat, trgseve = sys.argv[3].split(";")
print sys.argv[3].split(";")
text = """ plaintext email here
"""
html = """
<html>
<head>
<title></title>
</head>
<body>
<p style="margin-left: 80px;"><strong>Trigger:</strong> %s trgname <br />
<strong>Status</strong>: %s trgstat <br />
<strong>Severity:</strong> %s trgseve </p>
<p style="margin-left: 40px;"><a href="mailto:xx%40yy.nl?bcc=yy%40xx.com&body=insert%20text%2C%0A%0Ahere%20for%20the%20emailA%5BFirmname%5D%0A%5B%28Address%29%20Adressline2%5D">Click here</a> <strong> %s hostnam.</strong><br />
</p>
<a href="mailto:xxxyyy@yxy.com?subject=Unsubscribe%20me">Click here to unsubscribe</a> </span><br />
</p>
</body>
</html>
""" % ('hostnam', 'trgname', 'trgstat', 'trgseve', 'hostnam')
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
msg.attach(part1)
msg.attach(part2)
smtpserver = smtplib.SMTP(SRVSMTP)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login(me, PASS)
smtpserver.sendmail(me, you, msg.as_string())
smtpserver.quit()
您可以使用format
調用來代替當前使用的%
。
在您的示例中,將所有%s
替換為{}
,然后將% ('hostnam', 'trgname', 'trgstat', 'trgseve', 'hostnam')
.format(hostnam, trgname, trgstat, trgseve, hostnam)
模板字符串呢?
from string import Template
print(Template("here be %20 %40 my ${placeholder}string").safe_substitute(placeholder="amazing"))
# here be %20 %40 my amazing string
自Python 2.4起可用
您可以通過將多余的%
字符加倍來對其進行轉義:
<p style="margin-left: 40px;"><a href="mailto:xx%%40yy.nl?bcc=yy%%40xx.com&body=insert%%20text%%2C%%0A%%0Ahere%%20for%%20the%%20emailA%%5BFirmname%%5D%%0A%%5B%%28Address%%29%%20Adressline2%%5D">Click here</a> <strong> %s hostnam.</strong><br />
這有點乏味,其他答案可能更好。 我只是為了完整性而提到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.