我的scala程序中有以下两行
val success:Int = ("d:\\program.bat" !)
println("started "+success)
program.bat看起来像这样
@echo off
start "" "d:\notepad.exe"
echo DONE
该程序实际上启动了tomcat服务器,但它对于firefox,notepad等都是一样的...所以我把它简化为notepad.exe
我想开始记事本并看到“已开始0”。
问题是代码在第一行停止并且在我关闭记事本之前不打印“已启动0”
program.bat的最后一行是
echo DONE
和DONE是在执行停止之前打印出来的最后一件事(所以我认为它不会在program.bat中停止)。
我尝试将EXIT / B 0放在program.bat脚本的末尾,但它不会改变任何内容。
我听说它在linux下运行正常(当然使用program.sh)。
如何真正从program.bat中分离记事本并返回0?
答案 0 :(得分:3)
这种行为是可以预料到的,因为!
运算符返回被调用程序的退出代码 - 这意味着程序必须在退出退出代码之前终止。引用process
docs:
import scala.sys.process._
// This uses ! to get the exit code
def fileExists(name: String) = Seq("test", "-f", name).! == 0
// This uses !! to get the whole result as a string
val dirContents = "ls".!!
// This "fire-and-forgets" the method, which can be lazily read through
// a Stream[String]
def sourceFilesAt(baseDir: String): Stream[String] = {
val cmd = Seq("find", baseDir, "-name", "*.scala", "-type", "f")
cmd.lines
}
如果您对退出代码感兴趣但希望您的Scala程序在同一时间取得进展,例如,打印调用程序的输出,您可以使用ProcessBuilder.hasExitValue
找出退出代码的时间是可用的。