首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala: ProcessIO读取器附带程序的输出

Scala: ProcessIO读取器附带程序的输出
EN

Stack Overflow用户
提问于 2017-10-03 06:22:04
回答 1查看 86关注 0票数 0

我正在为带有REPL的命令行程序编写GUI界面程序(类似于bashgnuplot),从现在起称为tlmgr。主线程执行GUI (scalafx)操作,另一个线程启动tlmgr并连接stdin/stdout/stderr:

代码语言:javascript
复制
val procIO = new ProcessIO(inputFn(_), outputFn(_), errorFn(_))
val processBuilder: ProcessBuilder = Seq("tlmgr", "shell")
process = processBuilder.run(procIO)

outputFnerrorFn使用从InputStream传递到ProcessIOBufferedReader

代码语言:javascript
复制
val reader = new BufferedReader(new InputStreamReader(stdOut))

outputFn基本上是在循环中读取输出并将其放入SyncVar[String]中。

代码语言:javascript
复制
while (true) {
    line = reader.readLine
    outputString.put(line)
}

(当然还有更多的细节)。

从主线程中,我向tlmgr发送一个字符串,并读取输出,直到提示再次到达。

代码语言:javascript
复制
def get_output_till_prompt() = {
  ...
  while (!found) {
    result = outputString.take()
    if (result == "PROMPT")
      found = true

(当然还有更多的细节)。

现在,这没有任何问题,我可以在很多方面进行互动,很多事情都很顺利。

直到发生以下情况:我向tlmgr发送一个特定的字符串,然后tlmgr在内部执行一些事情(这是一个perl程序),然后tlmgr反过来调用外部程序来完成一些工作。在此之后,tlmgr再次愉快地输出PROMPT,但现在读者看到了它。它似乎完全迷失了方向。

此外,与tlmgr的进一步沟通似乎陷入困境,没有任何反应,一切都悬着。

这个设置有什么要注意的吗?

完整代码:https://github.com/TeX-Live/tlcockpit

EN

回答 1

Stack Overflow用户

发布于 2017-10-06 10:45:29

我自己回答问题是因为我发现了问题。在一个辅助线程中抛出一段代码和异常,有趣的是,这没有在任何地方发出信号,也没有任何中断。在整个线程部分添加“尝试和捕捉”显示了错误。

尽管如此,我仍然感到惊讶的是,这个项目会继续与这个未被提及的例外情况一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46538288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档