给定一个简单的Python脚本“test.py“:
from sys import stdout
stdout.write("text out")
字符串
使用system2()
从R终端调用它可以正常工作:
python <- "C:/Users/username/Anaconda3/envs/general/python.exe"
script <- "C:/Users/username/Project Folder/test.py"
system2(command = python, args = shQuote(script), stdout = TRUE, stderr = FALSE)
# "text out"
型
但是在RStudio中运行相同的代码会返回一个空vector,并带有一个非零的退出警告:
system2(command = python, args = shQuote(script), stdout = TRUE, stderr = FALSE)
# character(0)
# attr(,"status")
# [1] 1
# Warning message:
# In system2(command = python, args = shQuote(script), stdout = TRUE, :
# running command '"C:/Users/username/Anaconda3/envs/general/python.exe" "C:/Users/username/Project Folder/test.py"' had status 1
型
其他故障排除显示:
- 在Rgui中,没有警告,但也只返回一个空向量。
- 如果Python脚本使用
print()
或尝试写入磁盘而不是stdout.write()
,结果是相同的。 - 使用
system(paste(shQuote(python), shQuote(script)))
而不是system2()
的结果是相同的。 - 在RStudio中使用
system2()
可以很好地运行系统命令或带参数的批处理文件--只是不能运行Python脚本。 system2("printenv")
显示了在R终端会话中而不是在RStudio中设置的一些env变量;但是在RStudio中使用Sys.setenv()
设置这些并不能解决问题。sessionInfo()
显示无明显差异。- 如果RStudio以管理员权限运行,则问题仍然存在。
这个问题的背景是,我从来没有能够让网状在我的机器上工作,尽管定期尝试在几个版本的R和RStudio。这个问题似乎源于一个类似于上面reticulate:::python_config_impl()
中的system2()
调用,它产生了相同的警告(随后是错误)。
1条答案
按热度按时间x6h2sr281#
我仍然不明白根本原因是什么,但我找到了一个解决办法--如果我从批处理脚本而不是快捷方式启动RStudio,一切都很好。
字符串
由于这是可行的,我假设从命令提示符/批处理而不是快捷方式启动时,环境中一定有一些差异。但是编辑“.Renviron”来使所有的env变量与我从批处理启动时看到的相匹配并没有帮助。所以我仍然不知道问题是什么,或者为什么这个解决方案有效。