Java写给Stdin

时间:2012-08-30 00:29:18

标签: java jruby stdin

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

因此,如果我希望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能够输入这些选项,而不是让用户这样做。

2 个答案:

答案 0 :(得分:0)

我对JRuby并不过分熟悉,老实说我会认为它会自动包装System.in。检查是否存在这样的选项。否则我个人的选择就是简单地启动一个新的Process(“ruby”)并使用它提供的流。

此致 md_5

答案 1 :(得分:0)

Jruby确实有一种通过指定输入流和两个输出流来构建它的方法,但是我发现更好的工作是创建一个写入PipedInputStream的PipedOutPutstream,并将系统输入设置为PipedInputStream,如下所示: / p>

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