在 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}")
这里是令人沮丧的问题的组合。 本质上,我希望 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}")