R 系统函数总是 returns 错误 127
R system functions always returns error 127
我需要从 R
执行一个外部工具,并且该工具中发生了处理错误(如果有的话)。
我知道 3 个函数可以完成我的任务:
shell, system and system2.
试图测试那些,我看到那个命令
shell("notepad")
打开记事本。据我所知 shell 不允许检查错误(没有界面可以查看 stderr
)。
当我打电话给
system("notepad")
或
system2("notepad")
R
冻结尝试发出这些命令。
呼叫
system("start notepad")
或
system2("start notepad")
returns警告
Warning message:
running command '"start notepad"' had status 127
正如我在评论中提到的,R 文档显示在 Windows 中 system()
函数不会启动单独的 shell(如果需要)。这就是为什么命令行命令 运行 带有 system()
,但需要单独 window 的记事本却不需要 运行:
来自 documentation for system()
:
The most important difference is that on a Unix-alike system launches a shell which then runs command. On Windows the command is run directly – use shell for an interface which runs command via a shell (by default the Windows shell cmd.exe, which has many differences from a POSIX shell).
system("bash -l", input = "notepad")
正在调整@DavidTseng 的回答(抱歉没有足够的声誉来支持它)...
system("cmd.exe", input = "notepad")
在 Windows 为我工作。
对于 windows 用户
错误:system(path("c:", "program files", "r", "anysoft.EXE"))
但有效:system(path("c:", shQuote("program files"), "r", "anysoft.EXE"))
你们把事情弄得这么复杂。我参考this answer解决了这个问题。问题出在 PATH 上。在 R 中输入 Sys.which('')
,你什么也看不到。所以你必须在 CMD 中设置路径,然后在 R 中使用 Sys.setenv(PATH = '')
来完成这项工作。
我不确定是否有 R 的更新允许这个问题,因为这个问题是将近四年前提出的,但是 system("\"C:\path\to\exe.exe\" args", intern = T)
对我有用并且会提出一个单独的 child window 并在 Windows 10 + R 3.6 + RStudio 上工作。
不使用 'intern = T' 给了我一个 return 代码 127 而没有 运行 这个过程。
我遇到了同样的问题。安装过程中还有一个我没有做的额外步骤。
参考url
https://cran.r-project.org/bin/windows/Rtools/
寻找“将 Rtools 放在路径上”
writeLines('PATH="${RTOOLS40_HOME}\usr\bin;${PATH}"', con = "~/.Renviron")
我需要从 R
执行一个外部工具,并且该工具中发生了处理错误(如果有的话)。
我知道 3 个函数可以完成我的任务:
shell, system and system2.
试图测试那些,我看到那个命令
shell("notepad")
打开记事本。据我所知 shell 不允许检查错误(没有界面可以查看 stderr
)。
当我打电话给
system("notepad")
或
system2("notepad")
R
冻结尝试发出这些命令。
呼叫
system("start notepad")
或
system2("start notepad")
returns警告
Warning message:
running command '"start notepad"' had status 127
正如我在评论中提到的,R 文档显示在 Windows 中 system()
函数不会启动单独的 shell(如果需要)。这就是为什么命令行命令 运行 带有 system()
,但需要单独 window 的记事本却不需要 运行:
来自 documentation for system()
:
The most important difference is that on a Unix-alike system launches a shell which then runs command. On Windows the command is run directly – use shell for an interface which runs command via a shell (by default the Windows shell cmd.exe, which has many differences from a POSIX shell).
system("bash -l", input = "notepad")
正在调整@DavidTseng 的回答(抱歉没有足够的声誉来支持它)...
system("cmd.exe", input = "notepad")
在 Windows 为我工作。
对于 windows 用户
错误:system(path("c:", "program files", "r", "anysoft.EXE"))
但有效:system(path("c:", shQuote("program files"), "r", "anysoft.EXE"))
你们把事情弄得这么复杂。我参考this answer解决了这个问题。问题出在 PATH 上。在 R 中输入 Sys.which('')
,你什么也看不到。所以你必须在 CMD 中设置路径,然后在 R 中使用 Sys.setenv(PATH = '')
来完成这项工作。
我不确定是否有 R 的更新允许这个问题,因为这个问题是将近四年前提出的,但是 system("\"C:\path\to\exe.exe\" args", intern = T)
对我有用并且会提出一个单独的 child window 并在 Windows 10 + R 3.6 + RStudio 上工作。
不使用 'intern = T' 给了我一个 return 代码 127 而没有 运行 这个过程。
我遇到了同样的问题。安装过程中还有一个我没有做的额外步骤。
参考url
https://cran.r-project.org/bin/windows/Rtools/
寻找“将 Rtools 放在路径上”
writeLines('PATH="${RTOOLS40_HOME}\usr\bin;${PATH}"', con = "~/.Renviron")