如何使用Process builder

时间:2016-11-07 20:31:24

标签: java r

这应该很简单,但我一直都会收到错误。 我有一个挥杆应用程序。当用户按下按钮时,系统会提示他们选择要打开的R文件。 Rscript路径存储在用户首选项中。然后,Processbuilder应该运行脚本:

Processbuilder的方法如下

 public static void open(File document) throws IOException, ScriptException {
        Preferences userPrefs = Preferences.userNodeForPackage(TBB_SQLBuilder.class);
        String pt=document.getAbsolutePath().toString().trim()   
        Process process = new ProcessBuilder(userPrefs.get("PathToR",null)+" '"+pt+"'").start();
  }

然而它给了我错误:

java.io.IOException: Cannot run program "/Applications/RStudio.app '/Users/sebastianzeki/Myscript.R'": error=2, No such file or directory

当我将R路径(在MacOSX ElCapitaine上)更改为/Library/Frameworks/R.framework/Versions/3.1/Resources/Rscript时,我得到相同的错误

尝试运行Runtime.getRuntime().exec(userPrefs.get("PathToR",null));也会给我一个错误,但这次是:

Cannot run program "/Applications/RStudio.app": error=13, Permission denied

但是当我使用Rscript时,我不会得到这个 RStudio和Rscript的权限设置为每个人都可以读写。

我想要做的就是在R中运行我的脚本(这会输出我的应用程序选择的csv)

我知道Renjin(没有dplyr支持)JRI和rJava(带有路径的杂乱安装等)和RServe(只是不喜欢它)所以将我的脚本作为外部脚本运行的Process builder是最好的选择我。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

new ProcessBuilder(userPrefs.get("PathToR",null), pt); 的构造函数不是命令行,而是命令及其参数。因此,在此示例中,它应构造为

R

此构建器将使用单个参数pt运行pt。请注意,即使SP_Validate_User_Main ( @UserName VARCHAR(20), @Password VARCHAR(20), @From VARCHAR(10), @IP VARCHAR(15) ) -- does a bunch of stuff, then the following line is the last to execute EXECUTE SP_Validate_User @aUserName = @UserName, @aPassword = @Password 包含空格,也会将其解释为单个参数。