在Linux系统上运行。我有一个可执行的.jar文件,我试图将输出输出到我正在发送Python程序的电子邮件正文中。但是,尽管该程序执行,但在身体中什么也没有收到电子邮件。因此,.jar的输出在子过程中丢失。
import smtplib
import subprocess
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.ehlo()
# login cred
username='Sample@gmail.com'
password='password'
s.login(username,password)
# email objects
replyto='sample@sample.com'
sendto=['export@sample.com']
sendtoShow='sample@sample.com'
subject='Example Subject'
content=subprocess.run(['java', '-jar', 'Example.jar'], stdout=subprocess.PIPE)
mailtext='From: '+replyto+'rnTo: '+sendtoShow+'rn'
mailtext=mailtext+'Subject:'+subject+'rnrn'+content.stdout.decode("utf-8")
s.sendmail(replyto, sendto, mailtext)
rslt=s.quit()
print('Sendmail result=' + str(rslt[1]))
问题解决并反映了上述。
subprocess.call返回程序的返回代码,而不是程序的输出。因此,在您的情况下,"内容"是int
而不是string
。
尝试类似:
content=subprocess.run(['java', '-jar', 'Example.jar'], stdout=subprocess.PIPE)
mailtext='From: '+replyto+'rnTo: '+sendtoShow+'rn'
mailtext=mailtext+'Subject:'+subject+'rnrn'+content.stdout.decode("utf-8")
检查您要执行字符串串联的行。
mailtext='From: '+replyto+'nTo: '+sendtoShow+'n'
mailtext=mailtext+'Subject:'+subject+'n'+content
...
print('Sendmail result=' + str(rslt[1]))
这些线是否试图将str和int对象串联在一起?也就是说,replyto
,sendtoShow
,mailtext
,subject
或content
实际上是CC_7中的任何一个吗?为了避免猜测,只需像您在最后一行一样将它们扔到str
。
subprocess.call返回退出代码,而不是stdout。您需要使用popen方法。