2016-01-15 3 views
0

я получил следующий простой R-программу под названием hello.R:Запуск R-программы с Java

print('hello') 

Я хотел бы назвать этот код из Java в настоящее время. Это мой код в Java:

import java.io.IOException; 

public class Main { 

    public static void main(String[] args) { 
     String path = "C:\\Users\\Administrator\\Desktop\\hello.R"; 
     try { 
      Runtime.getRuntime().exec("C:\\Program Files\\R\\R-3.1.3\\bin\\Rscript "+path); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

Я ожидал, чтобы напечатать заявление привет в concole Java. Но программа Java вообще ничего не делала.

Знаете ли вы, в чем проблема?

+0

Вы конкатенация абсолютного пути ('path') с другим абсолютным путем в' Runtime.exec() '- даже без разделитель пути! –

+0

Я получил этот намек с другого поста: http://stackoverflow.com/questions/8844451/calling-r-script-from-java – XerXes

+0

Да, мне плохо, извините. Не заметил пробела и что вы на самом деле вызываете интерпретатор с аргументом 'path' в качестве аргумента. –

ответ

0

на основе this answer я думаю, что вы должны сделать следующее:

ProcessBuilder pb = new ProcessBuilder("/path/to/Rscript", "/path/to/hello.r"); 
pb.redirectOutput(Redirect.INHERIT); 
pb.redirectError(Redirect.INHERIT); 
Process p = pb.start(); 

Это перенаправляет как выходной поток и поток ошибок подпроцесса к текущему процессу, что позволяет наблюдать содержимое в консоли Java ,

+0

Я пробовал это, но, к сожалению, я получаю сообщение об ошибке: java.io.IOException: Не удается запустить программу «C: \ Program Files \ R \ R-3.1.3 \ bin \ Rscript C: \ Users \ Administrator \ Desktop \ hello .R ": CreateProcess error = 2, система не может найти указанный файл \t at java.lang.ProcessBuilder.start (Неизвестный источник) \t at Main.main (Main.java:12) Причиненный: java.io .IOException: Ошибка CreateProcess = 2, система не может найти указанный файл \t по адресу java.lang.ProcessImpl.create (собственный метод) \t at java.lang.ProcessImpl. (Unknown Source) \t на java.lang.ProcessImpl.start (Unknown Source) \t ... подробнее – XerXes

+0

2 Была ошибку в моем примере коды (команда и ее аргумент должен быть разделена), я обновил свой ответ. – rinde

+0

Я по-прежнему получаю ту же ошибку. – XerXes

0

Вы можете попробовать следующее, чтобы получить строку приветствия в Java:

#* @get /hello 
hello <- function() { 
    print("hello") 
} 

Вы можете запустить следующее:

library(plumber) 
r <- plumb("hello.R") 
r$run(port=8080) 

Если затем вызвать страницу

http://localhost:8080/hello 

ваш R-код будет выполнен.

Если вы хотите, чтобы выполнить его из Java решение может быть:

URL url = new URL("http://localhost:8080/hello"); 
    URLConnection connection = url.openConnection(); 
    BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream()))); 
    String result = br.readLine(); 
Смежные вопросы