簡體   English   中英

忽略Python多行字符串中的變量

[英]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&amp;body=insert%20text%2C%0A%0Ahere%20for%20the%20emailA%5BFirmname%5D%0A%5B%28Address%29%20Adressline2%5D">Click here</a> &nbsp;<strong> %s hostnam.</strong><br />
&nbsp;</p>
<a href="mailto:xxxyyy@yxy.com?subject=Unsubscribe%20me">Click here to unsubscribe</a>&nbsp;</span><br />
&nbsp;</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&amp;body=insert%%20text%%2C%%0A%%0Ahere%%20for%%20the%%20emailA%%5BFirmname%%5D%%0A%%5B%%28Address%%29%%20Adressline2%%5D">Click here</a> &nbsp;<strong> %s hostnam.</strong><br />

這有點乏味,其他答案可能更好。 我只是為了完整性而提到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM