2012-08-30 6 views
0

J'ai donc importé un interpréteur jruby en tant que bibliothèque pour exécuter une application ruby ​​externe. Cependant, j'ai besoin d'interagir avec l'application ruby ​​d'une manière ou d'une autre. En ce moment j'ai l'application de ruby ​​produisant des informations sur stdout et demandant des options d'utilisateur dans stdin. Donc si je veux que java soit capable de gérer l'insertion des options au lieu d'un utilisateur, j'ai besoin d'un moyen que je puisse écrire dans le stdin d'une manière ou d'une autre pour lancer les options. Est-ce que quelqu'un sait comment je peux faire cela? Ou même une meilleure façon de le faire?Java écrit en Stdin

J'appelle JRuby comme ceci:

String[] newargs = new String[2]; 
newargs[0] = "-S"; 
newargs[1] = "path_to_some_rubyfile.rb" 
org.jruby.Main jruby = new org.jruby.Main(); 
ruby.main(newargs); 

Les sorties d'applications Ruby trucs comme ça:

How do you feel today? 
(1) Happy 
(2) Sad 

Et attend ensuite l'entrée utilisateur d'entrer 1 ou 2. Mais je aimerait que Java saisisse ces options au lieu de demander à un utilisateur de le faire.

Répondre

0

Je ne suis pas trop familier avec JRuby, j'aurais honnêtement pensé qu'il enveloppe automatiquement System.in. Vérifiez pour voir qu'une telle option existe. Sinon, mon choix personnel serait simplement de commencer un nouveau processus ("ruby") et d'utiliser les flux fournis par cela.

Cordialement md_5

0

JRuby a une façon de contruct en spécifiant un flux entrant et de deux flux de sortie, mais ce que je trouve mieux travailler était de créer un PipedOutputStream qui écrit à un PipedInputStream et que vous définissez le système entrée à la PipedInputStream comme suit:

PipedOutputStream inwriter = new PipedOutputStream(); 
PipedInputStream input = new PipedInputStream(inwriter); 
System.setIn(input); 
inwriter.write("1\n".getBytes());