使用Networkite调用Python脚本并发送电子邮件
我使用Windows任务调度器一天运行几次R脚本。脚本将转换一些新数据并将其添加到现有数据文件中 我想使用使用Networkite调用Python脚本并发送电子邮件,python,r,rstudio,smtplib,reticulate,Python,R,Rstudio,Smtplib,Reticulate,我使用Windows任务调度器一天运行几次R脚本。脚本将转换一些新数据并将其添加到现有数据文件中 我想使用networkite调用一个Python脚本,该脚本将向我发送一封电子邮件,列出添加了多少行数据,以及是否发生了任何错误。当我从RStudio中逐行运行它时,它工作正常。问题是,当脚本按计划运行时,它不起作用。我得到以下错误: Error in py_run_file_impl(file, local, convert) : Unable to open file 'setup_smt
networkite
调用一个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答案)听起来像是networkite
只能在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())
库(tidyverse)
图书馆(网状)
图书馆(lubridate)
n_rows这个执行问题
当我从RStudio中逐行运行它时,它工作正常。问题是,当脚本按计划运行时,它不起作用
原因有多种:
您有多个Python版本,其中smtplib
安装在一个版本(例如,Python 2.7或Python 3.6)上,而不是另一个版本。检查命令行、Rscript-e“print(Sys.which(“Python”)”)”
和RStudio、Sys.which(“Python”)
正在使用哪种Python。显式定义要使用Networkite的运行的Python.exe使用\u Python(“/path/to/Python”)
您有多个R版本,其中Rscript使用的版本与RStudio不同。检查两个:Rscript-e“print(R.home())”
中的R.home()
变量,并在RStudio中调用R.home()
。在适当的R版本bin文件夹中显式调用所需的Rscript:/path/to/R#.#/bin/Rscript”/path/to/code.R“
在同一个R版本上安装了多个networkite
包,它们位于不同的库位置,每个包调用不同的Python版本。检查矩阵:installed.package()
,定位网状行。显式调用库(网状,lib.loc=“/path/to/specific/library”)
这个执行问题
当我从RStudio中逐行运行它时,它工作正常。问题是,当脚本按计划运行时,它不起作用
原因有多种:
您有多个Python版本,其中smtplib
安装在一个版本(例如,Python 2.7或Python 3.6)上,而不是另一个版本。检查命令行、Rscript-e“print(Sys.which(“Python”)”)”
和RStudio、Sys.which(“Python”)
正在使用哪种Python。显式定义要使用Networkite的运行的Python.exe使用\u Python(“/path/to/Python”)
您有多个R版本,其中Rscript使用的版本与RStudio不同。检查两个:Rscript-e“print(R.home())”
中的R.home()
变量,并在RStudio中调用R.home()
。在适当的R版本bin文件夹中显式调用所需的Rscript:/path/to/R#.#/bin/Rscript”/path/to/code.R“
在同一个R版本上安装了多个networkite
包,它们位于不同的库位置,每个包调用不同的Python版本。检查矩阵:installed.package()
,定位网状行。显式调用库(网状,lib.loc=“/path/to/specific/library”)
谢谢冻糕!我将尝试所有这些解决方案,并报告效果。下一站再见,哈哈!很高兴帮助你,芝加哥人!事实证明,我只需要使用python脚本的绝对文件路径:source\u python(“C:/My\u Folders/../setup\u smtp.py”)。新手失误!再次感谢您的详细故障排除,当我有一个真正的问题:)谢谢冻糕!我将尝试所有这些解决方案,并报告效果。下一站再见,哈哈!很高兴帮助你,芝加哥人!事实证明,我只需要使用python脚本的绝对文件路径:source\u python(“C:/My\u Folders/../setup\u 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!
"""