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