2017-02-12 3 views
0

Ich versuche, indem Sie die folgenden ein Ruby-Skript von Java auszuführen:Lauf Ruby-Skript aus Java

public static void main(String[] args) { 
    try { 
     Process process = Runtime.getRuntime().exec("ruby /path/to/file/file.rb"); 
     process.waitFor(); 
     System.out.println(process.exitValue()); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Wenn ich dies ausgeführt wird, erhalte ich 1 als Exit-Wert. In meinem Ruby-Skript verwende ich Watir und Nokogiri, daher sollte ein Browser verwendet werden. Nichts passiert.

Wenn ich ruby /path/to/file/file.rb in mein Terminal kopiere, läuft es richtig. Irgendein Grund, warum das nicht richtig funktioniert?

+1

Wenn Java ausgeführt wird, wird es von Ihrem Konto mit Ihren Berechtigungen ausgeführt oder wird es als ein anderer, anderer Benutzer ausgeführt? Sind die Berechtigungen für diesen Benutzer korrekt? Weiß Ruby, wo seine Bibliotheken/Edelsteine ​​sind? –

+0

Ist die Ruby-Version die gleiche wie die, die Sie auf dem Terminal ausführen? Sie müssen sicherstellen, dass die Umgebung (Umgebungsvariablen, Ruby-Version geladen, Edelstein-Set (falls vorhanden)) ist die gleiche in der Java-Laufzeitprozess – Guilherme

+0

@Guilherme Wie würde ich überprüfen, ob sie die gleiche Version sind? – user081608

Antwort

3

Sie müssen die Standardausgabe und Standardfehlerströme konsumieren, um die Ausgabe Ihres Prozesses zu erhalten und herauszufinden, was falsch ist. Siehe die Antwort auf "Using a thread to capture process output".