0

そこで、jruby インタープリターをライブラリーとしてインポートして、外部の Ruby アプリケーションを実行しました。ただし、何らかの方法で Ruby アプリケーションと対話する必要があります。現在、標準出力に情報を出力し、標準入力でユーザーオプションを要求するルビーアプリケーションがあります。

したがって、Java がユーザーの代わりにオプションの挿入を処理できるようにする場合は、オプションを選択するために Java から stdin に何らかの方法で書き込むことができる方法が必要になります。誰も私がこれを行う方法を知っていますか? または、これを行うより良い方法はありますか?

私は次のようにjrubyを呼び出しています:

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);

Ruby アプリは次のようなものを出力します。

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

そして、ユーザー入力が 1 または 2 を入力するのを待ちます。ただし、ユーザーに入力させるのではなく、Java にこれらのオプションを入力させたいと思います。

4

2 に答える 2

0

Jrubyには、inputstreamと2つの出力ストリームを指定して構成する方法がありますが、PipedInputStreamに書き込むPipedOutPutstreamを作成し、システム入力をPipedInputStreamに次のように設定する方がうまくいくことがわかりました。

PipedOutputStream inwriter = new PipedOutputStream();
PipedInputStream input = new PipedInputStream(inwriter);
System.setIn(input);
inwriter.write("1\n".getBytes());
于 2012-08-30T17:39:25.027 に答える
0

私は JRuby にあまり精通していません。そのようなオプションが存在することを確認してください。それ以外の場合、私の個人的な選択は、単純に新しい Process("ruby") を開始し、それによって提供されるストリームを使用することです。

よろしく md_5

于 2012-08-30T00:38:27.323 に答える