我每天使用 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!
"""