Я использую планировщик заданий Windows для запуска сценария R несколько раз в день. Скрипт преобразует некоторые новые данные и добавляет их в существующий файл данных.
Я хочу использовать reticulate
для вызова скрипта Python, который отправит мне электронное письмо со списком, сколько строк данных было добавлено, и если возникнут какие-либо ошибки. Это работает правильно, когда я запускаю его построчно из RStudio. Проблема в том, что он не работает, когда скрипт выполняется по расписанию. Я получаю следующие ошибки:
Error in py_run_file_impl(file, local, convert) :
Unable to open file 'setup_smtp.py' (does it exist?)
Error in py_get_attr_impl(x, name, silent) :
AttributeError: module '__main__' has no attribute 'message'
Calls: paste0 ... py_get_attr_or_item -> py_get_attr -> py_get_attr_impl
Execution halted
Этот ответ на github https://github.com/rstudio/reticulate/issues/232) звучит так, как будто reticulate
можно использовать только в RStudio - по крайней мере, для того, что я пытаюсь сделать. У кого-нибудь есть предложения?
Пример сценария R:
library(tidyverse)
library(reticulate)
library(lubridate)
n_rows <- 10
time_raw <- now()
result <- paste0("\nAdded ", n_rows,
" rows to data file at ", time_raw, ".")
try(source_python("setup_smtp.py"))
message_final <- paste0(py$message, result)
try(smtpObj$sendmail(my_email, my_email, message_final))
try(smtpObj$quit())
Сценарий Python («setup_smtp.py») выглядит следующим образом:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Call from reticulate to log in to email
"""
import smtplib
my_email = '...'
my_password = '...'
smtpObj = smtplib.SMTP('smtp.office365.com', 587)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login(my_email, my_password)
message = """From: My Name <email address>
To: My Name <email address>
Subject: Test successful!
"""