8

scala.sys.process 的文档提供了有关如何将 URL 或文件重定向到进程 (stdin) 的示例。但是如何重定向字符串呢?

我使用 Scala 2.9。

4

3 回答 3

11

除了 a FileorURL您还可以提供InputStreamto ProcessBuilder

有多种方法可以将 aString转换为InputStream. 在下面我使用ByteArrayInputStreamand 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
于 2012-11-11T20:57:49.237 回答
1

更新@soucredelica 的答案,我还展示了如何将Streamof连接StringStringusing 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
于 2019-06-04T03:05:05.927 回答
0

要获取 ProcessBuilder,请参阅 scaladoc

http://www.scala-lang.org/api/current/scala/sys/process/ProcessBuilder.html

scala.sys.process.Process#apply 有多种参数,包括单个字符串。

我希望能帮助你。

于 2012-11-12T03:20:16.563 回答