0

所以我已经导入了一个 jruby 解释器作为一个库来运行一个外部 ruby​​ 应用程序。但是我需要以某种方式与 ruby​​ 应用程序交互。现在我有 ruby​​ 应用程序在标准输出上输出信息并在标准输入中请求用户选项。

因此,如果我希望 java 能够处理插入选项而不是用户,我需要一种可以从 java 以某种方式写入标准输入以选择选项的方法。有谁知道我该怎么做?或者甚至是更好的方法来做到这一点?

我这样称呼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 并不太熟悉,老实说我会认为它会自动包装 System.in。检查是否存在这样的选项。否则,我个人的选择是简单地启动一个新的 Process("ruby") 并使用它提供的流。

问候 md_5

于 2012-08-30T00:38:27.323 回答
0

Jruby 确实有一种方法可以通过指定一个输入流和两个输出流来构建它,但是我发现更好的方法是创建一个写入 PipedInputStream 的 PipedOutPutstream,然后将 System 输入设置为 PipedInputStream,如下所示:

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