【发布时间】:2018-02-17 08:35:15
【问题描述】:
我正在使用 Scala 为使用文本输入和输出的游戏编写机器人。所以我想以交互方式处理进程——也就是说,我的代码从进程接收输出,使用它,然后才将下一个输入发送到进程。所以我想给一个函数同时访问 inputStreams 和 outputStream。
这似乎不适合 scala.sys.process.BasicIO 中的任何工厂或 scala.sys.process.ProcessIO 的构造函数(三个函数,每个函数只能访问一个流)。
这是我目前的做法。
private var rogue_input: OutputStream = _
private var rogue_output: InputStream = _
private var rogue_error: InputStream = _
Process("python3 /home/robin/IdeaProjects/Rogomatic/python/rogue.py --rogomatic").run(
new ProcessIO(rogue_input = _, rogue_output = _, rogue_error = _)
)
try {
private val rogue_scanner = new Scanner(rogue_output)
private val rogue_writer = new PrintWriter(rogue_input, true)
// Play the game
} finally {
rogue_input.close()
rogue_output.close()
rogue_error.close()
}
这可行,但感觉不像 Scala。有没有更惯用的方法来做到这一点?
【问题讨论】: