使用scala.sys.process与超时
发布时间:2020-12-16 21:31:32 所属栏目:安全 来源:网络整理
导读:我发现它非常酷,使用 standard syntax像 import scala.sys.process._ val countLogger = ProcessLogger(line = {println ("out line: " + line)},line = {println ("err line: " + line)}) val exitCode = ("cat prog.c" # "gcc prog.c -o prog -lm" # "echo
我发现它非常酷,使用
standard syntax像
import scala.sys.process._ val countLogger = ProcessLogger(line => {println ("out line: " + line)},line => {println ("err line: " + line)}) val exitCode = ("cat prog.c" #&& "gcc prog.c -o prog -lm" #&& "echo running,this may hang" #&& "prog.exe") ! countLogger println("exitCode = " + exitCode) 然而,最后一个进程挂起.有可能在超时时杀死它吗? 解决方法
您可以将进程包装在未来(blocking(_))中,如果在超时后不返回,则调用process.destroy().
这就是我为我的小Processor library做的,例如see here.而不是使用!要等待退出代码,你可以使用run方法.这是README的适应性: import scala.concurrent._ import ExecutionContext.Implicits.global import scala.sys.process._ val p = "sleep 100".run() // start asynchronously val f = Future(blocking(p.exitValue())) // wrap in Future val res = try { Await.result(f,duration.Duration(2,"sec")) } catch { case _: TimeoutException => println("TIMEOUT!") p.destroy() p.exitValue() } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |