Захватить процесс stderr в скале - PullRequest
16 голосов
/ 06 апреля 2011

При использовании API процесса scala 2.9 я могу делать что-то вроде

"ls -l"!

, который отправит процесс stdout и stderr в мой собственный. Или:

val output = "ls -1"!!

, который вернет все, что было отправлено на стандартный вывод, в вывод val.

Как мне подобным образом получить stderr?

1 Ответ

38 голосов
/ 06 апреля 2011

Вы можете создать свой собственный ProcessLogger:

import sys.process._

val logger = ProcessLogger(
    (o: String) => println("out " + o),
    (e: String) => println("err " + e))

scala> "ls" ! logger
out bin
out doc
out lib
out meta
out misc
out src
res15: Int = 0

scala> "ls -e" ! logger
err ls: invalid option -- e
err Try `ls --help' for more information.
res16: Int = 2

Редактировать: предыдущий пример просто печатает, но он может легко сохранить выходные данные в некоторой структуре:

val out = new StringBuilder
val err = new StringBuilder

val logger = ProcessLogger(
    (o: String) => out.append(o),
    (e: String) => err.append(e))

scala> "ls" ! logger
res22: Int = 0

scala> out
res23: StringBuilder = bindoclibmetamiscsrc

scala> "ls -e" ! logger
res27: Int = 2

scala> out
res28: StringBuilder =

scala> err
res29: StringBuilder = ls: invalid option -- eTry `ls --help' for more information.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...