在Linux系统上运行。我有一个可执行的.jar文件,我试图将输出输入到我正在发送我的python程序的电子邮件正文中。但是,虽然此程序执行,但收到的电子邮件中没有任何内容。因此.jar的输出在子进程中丢失。
import smtplib
import subprocess
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.ehlo()
# login cred
username='[email protected]'
password='password'
s.login(username,password)
# email objects
replyto='[email protected]'
sendto=['[email protected]']
sendtoShow='[email protected]'
subject='Example Subject'
content=subprocess.run(['java', '-jar', 'Example.jar'], stdout=subprocess.PIPE)
mailtext='From: '+replyto+'\r\nTo: '+sendtoShow+'\r\n'
mailtext=mailtext+'Subject:'+subject+'\r\n\r\n'+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+'\r\nTo: '+sendtoShow+'\r\n'
mailtext=mailtext+'Subject:'+subject+'\r\n\r\n'+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
中的任何一个int
物体?为了避免猜测,只需像在最后一行那样将它们转换为str
。
subprocess.call返回退出代码,而不是stdout。你需要使用popen方法。