Jednoskładkowe użycie BasicIO lub ProcessLogger jest atrakcyjne.
scala> val sb = new StringBuffer
sb: StringBuffer =
scala> ("/bin/ls /tmp" run BasicIO(false, sb, None)).exitValue
res0: Int = 0
scala> sb
res1: StringBuffer = ...
lub
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 = ...
W zależności od tego, co masz na myśli przez porwanie, może jesteś zainteresowany wyjścia, chyba że kod wyjścia jest niezerowy. W takim przypadku zajmij się wyjątkiem.
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
Re: „poszukuje także prosty sposób to zrobić ...”. Publikowanie nagrody nie jest tym samym, co machanie czarodziejską różdżką ;-). Nie zawsze są proste odpowiedzi na wyzwania, przed którymi stoimy. –
Faktycznie ogłoszenie nagrody * oznacza * wymachiwanie czarodziejską różdżką. Dostajesz magiczną uwagę na to pytanie. – javadba