在 R 中,在带有命令行参数的空格的路径中调用外部程序

in R, invoke external program in path with spaces with command line parameters

这里是令人沮丧的问题的组合。 本质上,我希望 R 使用命令行参数打开一个外部程序。我目前正在尝试在 Windows 机器上实现它,理想情况下它可以跨平台工作。

程序 (chimera.exe) 位于包含 space 的目录中:C:\Program Files\Chimera1.15\bin\ 命令行选项可以是例如 --nogui 标志和脚本名称,因此从 shell 我会写(space-specifics aside):

C:\Program Files\Chimera1.15\bin\chimera.exe --nogui scriptfile

如果我进入 windows cmd.exe 目录本身并输入 chimera.exe --nogui scriptfile

就可以了

现在在 R 中:

我一直在玩 shell()shell.exec()system(),但基本上我失败了,因为 spaces and/or 路径分隔符。

大多数时候 system() 只是出于某种原因打印“127”:

> system("C:/Program Files/Chimera1.15/bin/chimera.exe")
[1] 127`

back/forward 斜线使问题进一步复杂化,但没有解决问题:

> system("C:\Program Files\Chimera1.15\bin\chimera.exe")
Error: '\P' is an unrecognized escape in character string starting "C\P"

> system("C:\Program Files\Chimera1.15\bin\chimera.exe")
[1] 127

> system("C:\Program\ Files\Chimera1.15\bin\chimera.exe")
[1] 127

> system("C:\Program\ Files\Chimera1.15\bin\chimera.exe")
[1] 127

当我在没有 spaces 的目录中安装程序时,它可以工作。如何在 system() 或相关命令中转义或传递 space 或如何调用程序?

尝试 system2 因为它不使用 cmd 行处理器并使用 r"{...}" 以避免必须使用双反斜杠。这假定 R 4.0 或更高版本。有关引号语法的完整定义,请参阅 ?Quotes

chimera <- r"{C:\Program Files\Chimera1.15\bin\chimera.exe}"
system2(chimera, c("--nogui",  "myscript"))

例如,这对我有用(您可能需要更改路径):

R <- r"{C:\Program Files\R\R-4.1\bin\x64\Rgui.exe}"  # modify as needed
system2(R, c("abc", "def"))

并且当 Rgui 启动时,我们可以验证参数是由 运行 在 R 的新实例中传递的:

commandArgs()
## [1] "C:\PROGRA~1\R\R-4.1\bin\x64\Rgui.exe"
## [2] "abc"                                       
## [3] "def"   

系统

交替使用 system 但在路径两边加上引号,以便 cmd 正确解释它——如果它被输入到 Windows cmd 行,引号会也需要。

system(r"{"C:\Program Files\Chimera1.15\bin\chimera.exe" --nogui myscript}")