1

Mac/Linux で次のコマンドを実行した場合と同じ出力を Scala で取得しようとしています。

ps -ef | egrep "(mongo|mysql|rabbitmq)"

これは私の実装ですが、エレガントなものを探しています。

import sys.process._
import scala.collection.mutable.HashSet

object Regex {
  val set = new HashSet[String]                  
  val logger = ProcessLogger(
    (o: String) => """(mysql|mongo|rabbitmq)""".r findAllIn o foreach (set += _),
    (e: String) => println(e))                  
  "ps -ef " ! logger                             
  println(set)                 
}

私が試みていた別のアプローチは、ProcessLogger から "started" 関数を呼び出すことでしたが、正しく動作させることができませんでした。

val Procs = """(mysql|mongo|rabbitmq)""".r         
def started(i: String) = i match {
  case Procs(p) => p
  case _ => null
}

ありがとう。

4

2 に答える 2

2

Source通常の収集方法を使用して、出力を行ごとに処理できます。

io.Source
  .fromString("ps -ef".!!)
  .getLines()
  .filter(_.matches(".*(mysql|mongo).*"))
  .foreach(println)
于 2013-04-11T02:56:56.003 に答える
1
Seq("bash", "-c", """ps -ef | egrep "(mongo|mysql|rabbitmq)"""").!
于 2013-04-11T02:32:47.730 に答える