一些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)
但是,当命令生成无限输出流时,应用程序会挂起,直到我终止它或终止命令启动的进程.我还尝试在命令的末尾添加&以便在后台运行它,但我的应用程序仍然挂起.
因此,我正在寻找另一种方法来执行命令而不会挂起我的应用程序.
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)