shell 使用system2()运行Python脚本可以在R终端中运行,但不能在RStudio中运行

t98cgbkg  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(144)

给定一个简单的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()调用,它产生了相同的警告(随后是错误)。

x6h2sr28

x6h2sr281#

我仍然不明白根本原因是什么,但我找到了一个解决办法--如果我从批处理脚本而不是快捷方式启动RStudio,一切都很好。

start "" "C:\Program Files\RStudio\rstudio.exe"

字符串
由于这是可行的,我假设从命令提示符/批处理而不是快捷方式启动时,环境中一定有一些差异。但是编辑“.Renviron”来使所有的env变量与我从批处理启动时看到的相匹配并没有帮助。所以我仍然不知道问题是什么,或者为什么这个解决方案有效。

相关问题