У меня есть сценарий python, который запрашивает некоторые системы, а затем добавляет результаты в файл CSV. Этот сценарий запускается раз в неделю, а затем отправляет CSV-файл по электронной почте в качестве последнего шага. Однако, когда я открываю вложение, я получаю информацию о предыдущем запуске, но не информацию о текущем запуске. Я могу go подключиться к машине, на которой запущен сценарий, и увидеть, что файл действительно содержит текущую информацию.
Вот фрагменты: Открытие файла:
out_exists = os.path.isfile('/depot/sgcap/grid_capacities.csv')
if out_exists:
out = open("/depot/sgcap/grid_capacities.csv","a")
else:
out = open("/depot/sgcap/grid_capacities.csv","a")
out.write(('Date,Site,Installed Capacity (TB),Used Capacity (TB)'))
Запись и закрытие файла:
out.write('\n'+ str(date) + "," + str(s) + ',' + str(xisc_tb) + ',' + str(xusc_tb))
else:
print('\n Errored on http request with status ', response.status_code)
out.close
И, наконец, часть электронной почты (без зазрения совести):
#bundle it up and send the email
email = 'root@a.machine.com'
password = ''
send_to_email = ['some.guy@wherever.com','another.guy@wherever.com']
subject = 'StorageGRID Capacities'
message = 'This morning\'s capacity report'
file_location = ('/depot/sgcap/grid_capacities.csv')
msg = MIMEMultipart()
msg['From'] = email
msg['To'] = ", ".join(send_to_email)
msg['Subject'] = subject
msg.attach(MIMEText(message, 'plain'))
# Setup the attachment
filename = os.path.basename(file_location)
attachment = open(file_location, "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
# Attach the attachment to the MIMEMultipart object
msg.attach(part)
server = smtplib.SMTP('my.mailserver.com', 25)
#server.starttls()
#server.login(email, password)
text = msg.as_string()
server.sendmail(email, send_to_email, text)
server.quit()