繁体   English   中英

将字符串重定向到scala.sys.process

[英]Redirect string to scala.sys.process

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

我使用Scala 2.9。

除了FileURL您还可以向ProcessBuilder提供InputStream

有多种方法可以将String转换为InputStream 在下面我使用ByteArrayInputStreamString.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

要获取ProcessBuilder,请参阅scaladoc

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

scala.sys.process.Process #appin包含各种参数,包括单个String。

我希望能帮助你。

更新@ soucredelica的回答,我也显示了如何将拼接StreamStringString使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM