L'utilizzo su una sola riga di BasicIO o ProcessLogger è accattivante.
scala> val sb = new StringBuffer
sb: StringBuffer =
scala> ("/bin/ls /tmp" run BasicIO(false, sb, None)).exitValue
res0: Int = 0
scala> sb
res1: StringBuffer = ...
o
scala> import collection.mutable.ListBuffer
import collection.mutable.ListBuffer
scala> val b = ListBuffer[String]()
b: scala.collection.mutable.ListBuffer[String] = ListBuffer()
scala> ("/bin/ls /tmp" run ProcessLogger(b append _)).exitValue
res4: Int = 0
scala> b mkString "\n"
res5: String = ...
A seconda di cosa si intende per cattura, forse siete interessati a uscita a meno che il codice di uscita è diverso da zero. In tal caso, gestisci l'eccezione.
scala> val re = "Nonzero exit value: (\\d+)".r.unanchored
re: scala.util.matching.UnanchoredRegex = Nonzero exit value: (\d+)
scala> Try ("./bomb.sh" !!) match {
| case Failure(f) => f.getMessage match {
| case re(x) => println(s"Bad exit $x")
| }
| case Success(s) => println(s)
| }
warning: there were 1 feature warning(s); re-run with -feature for details
Bad exit 3
fonte
2013-05-11 22:11:05
RE: "anche alla ricerca di un modo semplice per fare questo ...". Pubblicare un premio non equivale a sventolare una bacchetta magica ;-). Non ci sono sempre risposte semplici alle sfide che affrontiamo. –
In effetti, pubblicare una taglia * è * agitando una bacchetta magica. Ottieni una quantità magica di attenzione alla domanda. – javadba