scala.sys.processのドキュメントには、URLまたはファイルをプロセス(stdin)にリダイレクトする方法の例が記載されています。しかし、どのようにして文字列をリダイレクトできますか?
私はScala2.9を使用しています。
scala.sys.processのドキュメントには、URLまたはファイルをプロセス(stdin)にリダイレクトする方法の例が記載されています。しかし、どのようにして文字列をリダイレクトできますか?
私はScala2.9を使用しています。
File
またはのほかに、URL
を提供することもできInputStream
ますProcessBuilder
。
String
をに変換するには、さまざまな方法がありますInputStream
。以下では、とを使用ByteArrayInputStream
していString.getBytes
ます。
cat
例として、入力を.の内容に設定して古き良き実行しinputString
ます。
scala> import java.io.ByteArrayInputStream
import java.io.ByteArrayInputStream
scala> import scala.sys.process._
import scala.sys.process._
scala> val cmd = List("cat")
cmd: List[java.lang.String] = List(cat)
scala> val inputString = "hello\nworld"
inputString: java.lang.String =
hello
world
scala> val is = new ByteArrayInputStream(inputString.getBytes("UTF-8"))
is: java.io.ByteArrayInputStream = java.io.ByteArrayInputStream@28d101f3
scala> val out = (cmd #< is).lines_!
out: Stream[String] = Stream(hello, ?)
scala> out.foreach(println)
hello
world
@soucredelicaの回答を更新し、Stream
ofString
をString
usingに連結する方法も示しmkString
ます。
scala> import java.io.ByteArrayInputStream
import java.io.ByteArrayInputStream
scala> import scala.sys.process._
import scala.sys.process._
scala> val cmd = List("cat")
cmd: List[java.lang.String] = List(cat)
scala> val inputString = "hello\nworld"
inputString: java.lang.String =
hello
world
scala> val inputStream = new ByteArrayInputStream(inputString.getBytes("UTF-8"))
inputStream: java.io.ByteArrayInputStream = java.io.ByteArrayInputStream@28d101f3
scala> val outputStream: Stream[String] = (cmd #< inputStream).lineStream_!
outputStream: Stream[String] = Stream(hello, ?)
scala> println(outputStream.mkString("\n"))
hello
world
ProcessBuilderを入手するには、scaladocを参照してください
http://www.scala-lang.org/api/current/scala/sys/process/ProcessBuilder.html
scala.sys.process.Process#applyには、単一の文字列を含むさまざまな引数があります。
私はあなたを助けたいと思っています。