处理执行Unix命令,产生无穷无尽的输出

Lon*_*hai 5 scala process

一些unix命令如tail -f启动python web服务器(即cherrypy)将产生无穷无尽的输出,即阻止它的唯一方法是Ctrl-C.我正在开发一个执行命令的scala应用程序,我的实现是:

import scala.sys.process._
def exe(command: String): Unit = {
    command !
}
Run Code Online (Sandbox Code Playgroud)

但是,当命令生成无限输出流时,应用程序会挂起,直到我终止它或终止命令启动的进程.我还尝试在命令的末尾添加&以便在后台运行它,但我的应用程序仍然挂起.

因此,我正在寻找另一种方法来执行命令而不会挂起我的应用程序.

nai*_*rbv 2

Seq("sh", "-c", "tail -f /var/log/syslog > /dev/null &") !
Run Code Online (Sandbox Code Playgroud)

对我有用。我认为 Randall 的答案失败了,因为 scala 只是执行命令,无法解释像“&”这样的 shell 运算符。如果传递给 scala 的命令是“sh”并且参数是完整的 shell 命令,我们可以解决此问题。scala 如何解析/分隔各个参数似乎也存在问题,并且使用 Seq 而不是单个 String 效果更好。

上面相当于unix命令:

sh -c 'tail -f /var/log/syslog > /dev/null &'
Run Code Online (Sandbox Code Playgroud)