我刚刚看了新的scala.sys
and scala.sys.process
包看看这里是否有帮助。然而,我完全不知所措。
有人有关于如何实际启动流程的示例吗?
而且,这对我来说最有趣:你能分离进程吗?
当父进程结束时,分离进程将继续运行,这是 Ant 的弱点之一。
UPDATE:
分离是什么似乎有些混乱。有一个来自我当前项目的真实例子。一次使用 z-Shell,一次使用 TakeCommand:
Z-Shell:
if ! ztcp localhost 5554; then
echo "[ZSH] Start emulator"
emulator \
-avd Nexus-One \
-no-boot-anim \
1>~/Library/Logs/${PROJECT_NAME}-${0:t:r}.out \
2>~/Library/Logs/${PROJECT_NAME}-${0:t:r}.err &
disown
else
ztcp -c "${REPLY}"
fi;
指挥:
IFF %@Connect[localhost 5554] lt 0 THEN
ECHO [TCC] Start emulator
DETACH emulator -avd Nexus-One -no-boot-anim
ENDIFF
在这两种情况下,模拟器都会启动,并且即使在脚本结束后也会继续运行。当然,写两次脚本是一种浪费。因此,我现在研究 Scala,以实现无需 cygwin 或 xml 语法的统一流程处理。
首次导入:
import scala.sys.process.Process
然后创建一个ProcessBuilder
val pb = Process("""ipconfig.exe""")
那么你有两个选择:
-
运行并阻塞直到进程退出
val exitCode = pb.!
-
在后台运行该进程(分离)并获得Process
实例
val p = pb.run
然后你可以从进程中获取退出代码(如果进程仍在运行,它将阻塞直到退出)
val exitCode = p.exitValue
如果你想处理进程的输入和输出,你可以使用ProcessIO
:
import scala.sys.process.ProcessIO
val pio = new ProcessIO(_ => (),
stdout => scala.io.Source.fromInputStream(stdout)
.getLines.foreach(println),
_ => ())
pb.run(pio)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)