我想做的是围绕GHCI
包装我的Java程序。
在我看来,它应该像这样工作:
- 启动我的Java程序
- 记下一些Haskell函数作为Java的输入(即反向[1,2,3,4])
- 在我的Java控制台上查看相应的Haskell输出
醇>
因为我不想乱用任何语言桥梁,所以我尝试了笨拙的方法并使用Runtime.exec()
方法。
这是我的代码:
public static void main(String[] args) throws Exception {
Runtime r = Runtime.getRuntime();
Process p = r.exec("ghci");
OutputStream output = p.getOutputStream();
output.write("let x = 5\r\n".getBytes());
output.write("x".getBytes());
int tmp;
String result = "";
while ((tmp = p.getInputStream().read()) != -1) {
result += (char) tmp;
}
System.out.println(result);
p.destroy(); }
我的问题是read()方法总是返回-1而我无法获得输出。我甚至不知道我写的是否创造了任何输出。
帮助将不胜感激。谢谢!
答案 0 :(得分:2)
很明显Process p = r.exec("ghci");
没有成功,read()
方法始终返回-1
。提供完整路径并进行检查。
Process p = r.exec("/fullpath/ghci 2>&1");
p.waitFor();//You need to use this line of code
首先执行ls
命令确认首先
Process p = r.exec("ls 2>&1");
同样修改下面的代码并尝试: -
public static void main(String[] args) throws Exception {
Runtime r = Runtime.getRuntime();
Process p = r.exec("ghci");
p.waitFor();
OutputStream output = p.getOutputStream();
ByteArrayOutputStream byte1=new ByteArrayOutputStream();
output.write(byte1.toByteArray());
String result=byte1.toString();
System.out.println(result);
p.destroy();
}