Обратите внимание на разницу между !
и !!
с точки зрения создания исключения при выходе из процесса с ненулевым значением:
def !!(log: ProcessLogger): String
Запускает процесс
представленный этим строителем, блокирует до его выхода и возвращает
вывод в виде строки. Стандартная ошибка отправляется на указанный
ProcessLogger. Если код выхода не равен нулю, генерируется исключение.
def !(log: ProcessLogger): Int
Запускает процесс, представленный этим строителем, блокирует, пока не выйдет,
и возвращает код выхода. Стандартный вывод и ошибка отправляются
данный ProcessLogger.
Неудачный тест вызовет ненулевое возвращаемое значение, и, таким образом, !!
вызовет исключение. С другой стороны !
не выбрасывает, так что вот возможное решение:
import java.io.File
import scala.sys.process.{Process, ProcessLogger}
object SbtLogger extends App{
val (out, err) = (new StringBuffer(), new StringBuffer())
val logger = ProcessLogger(
line => out.append(line + '\n'),
line => err.append(line + '\n')
)
val baseDir = new File("/Users/gakuo/Documents/ThesisProject/ShoppingCartExample")
Process(Seq("sbt", "test"), baseDir) ! logger
println(out)
}
Обратите внимание, как мы проходим logger
в
Process(Seq("sbt", "test"), baseDir) ! logger
, который заставит out
сохранить окончательный результат процесса.