我正在.exe使用R从R 调用system("script.exe object")。
.exe
system("script.exe object")
我懂了Warning: running command had status 127。我知道这意味着.exe找不到该文件。
Warning: running command had status 127
我在窗户上。当我使用它shell而不是system它的魅力时。但是,我正在设计一个Shiny应用程序,该应用程序将部署在Linux环境(shinyapps.io)中。这就是为什么我需要使用system。
shell
system
编辑
在Windows上,它可以system(paste("cmd.exe /c", "script.exe object"), intern = FALSE, wait = TRUE)按照此处的建议使用。但是当我在Linux上部署应用程序时却没有。
system(paste("cmd.exe /c", "script.exe object"), intern = FALSE, wait = TRUE)
暗示
在Windows本地上,如果我system用system2:替换system2(paste("cmd.exe /c", "script.exe object"), wait = TRUE),它会status 127发出警告,并且 输出与在Linux上部署的应用程序中 的 输出完全相同 。
system2
system2(paste("cmd.exe /c", "script.exe object"), wait = TRUE)
status 127
在此处创建可复制的示例很困难,但是如果需要,我可以尝试。请告诉我。
上下文:基本上.exe是一个黑匣子(编译的C++代码),它使用.txt文件作为输入并输出另一个.txt文件。我正在使用R将.txt文件转储到当前工作目录中,然后回读由.exe(在.exe存储该文件的当前工作目录中创建的)生成的.txt文件。
问题实际上源于以下事实:.exe文件仅是Windows的可执行文件。它在Linux环境中不是开箱即用的(您可以使用WINE,但是在我的情况下这是不可能的,因为我是从R内部调用可执行文件的,我sudo在虚拟机所使用的虚拟机上没有任何权限或任何权限。我的应用的主机)。因此,我在Linux虚拟机上编译了使用g 编写的c 代码,并使用了.out文件而不是.exe。
sudo
.out
然后在我的R脚本中,我只需要以下两个调用:
system("chmod a+x script.out") # to make Linux understand that the file is an executable system("./script.out object") # to run the script
system("chmod a+x script.out") # to make Linux understand that the file is an executable
system("./script.out object") # to run the script