今回は,Scala 2.9.0に新たに追加されたscala.sys.processパッケージについて紹介します.
scala.sys.processパッケージはScala外部のプロセスを扱うための機能が含まれています.
今回のプログラムも,ScalaのREPL(対話型評価環境)上でプログラム実行したいと思います.
REPLは配布されているScalaの実行ファイル(scala.batまたはscala)を実行することで起動します.
Scalaのサイトからダウンロードし,実行してください.
すると,次のようなバナーが表示されると思います.
- 《 scala(REPL)起動時の表示 》
-
Welcome to Scala version 2.9.0.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.
scala.sys.processパッケージは,Scalaのビルドツールであるsbtの一部だったものが元となっています.
では実際に動作を確認してみます.
まずは,テンポラリーファイルを作成し,そのファイルの一覧を表示してみます.
- 《 テンポラリーファイル作成後,ファイル一覧表示 》
-
scala> import scala.sys.process._
scala> (1 to 10).foreach("touch" + " " + "file" + _ + ".tmp" run)
scala> "ls" run
file1.tmp
file10.tmp
file2.tmp
file3.tmp
file4.tmp
file5.tmp
file6.tmp
file7.tmp
file8.tmp
file9.tmp
res0: scala.sys.process.Process = scala.sys.process.ProcessImpl$SimpleProcess@43059849
次に,"1"を含むファイル名のみ表示してみます.
今度はパイプを使用して実現したいと思います.
- 《 一部のファイル名のみ表示 》
-
scala> "ls" #| "grep 1" run
res1: scala.sys.process.Process = scala.sys.process.ProcessImpl$PipedProcesses@42847574
scala> file1.tmp
file10.tmp
このように,パイプ処理も利用することができます.
また,結果をScalaへ取り込むこともできます.
- 《 ファイル一覧結果をScalaに取り込んだ後にそれを表示 》
-
scala> Process("ls").lines.foreach(println)
file1.tmp
file10.tmp
file2.tmp
file3.tmp
file4.tmp
file5.tmp
file6.tmp
file7.tmp
file8.tmp
file9.tmp
上記のように簡単に外部プロセスを呼び出し連携することができますので,
Scalaを利用している方は,ぜひ試してみてはいかがでしょうか?