Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java REPL与程序之间的交互_Java_Scala_System Calls - Fatal编程技术网

Java REPL与程序之间的交互

Java REPL与程序之间的交互,java,scala,system-calls,Java,Scala,System Calls,我想做的是创建一个程序,在REPL(比如scala REPL)和用户之间充当中间人。换句话说,用户应该键入命令,而不是直接转到REPL执行,它们被传递到程序,然后程序在进行一些编辑后将其返回给REPL执行,显示答案等等 到目前为止,我得到的是一个简单的界面,用于在调用get_edited_data之后显示提示、获取用户输入和显示结果 我也知道叫“scala”独立完成这项工作相当不错。 我不知道如何把它们联系起来。我已经试过了,但运气不好 import java.io.PrintWriter im

我想做的是创建一个程序,在REPL(比如scala REPL)和用户之间充当中间人。换句话说,用户应该键入命令,而不是直接转到REPL执行,它们被传递到程序,然后程序在进行一些编辑后将其返回给REPL执行,显示答案等等

到目前为止,我得到的是一个简单的界面,用于在调用get_edited_data之后显示提示、获取用户输入和显示结果

我也知道叫“scala”独立完成这项工作相当不错。 我不知道如何把它们联系起来。我已经试过了,但运气不好

import java.io.PrintWriter
import scala.sys.process._
import scala.tools.jline.console.ConsoleReader

object Interfere {

  def main(args: Array[String]) {

    val repl = "scala"
    val console = new ConsoleReader
    val prompt = "prompt> "
    console.setPrompt(prompt)
    val out = new PrintWriter(
      console.getTerminal.wrapOutIfNeeded(System.out)
    )
    var line = console.readLine
    while (!line.equals("bye")) {
      val res = get_edited_data(line)
      out.println(s"The answer: $res")
      out.flush()
      line = console.readLine
    }
  }
}
我对ProcessIO所做的事情如下所示。但是它没有意义,因为它不可能将当前行作为输入,并且通常可以访问给定给它的内容

Process(repl).run(
      new ProcessIO(
        stdin => line,
        stdout => out,
        stderr => out
      )
    )

我最近也有类似的问题。后来,我使用java.lang.Process来处理输入和输出

更好的选择是使用或构建REPL,而不是创建另一个进程

是ILoop的一个例子