如何将某种可写流连接到 stdin
(以及连接到 stdout
和 stderr
的可读流)通过 scala.sys.process
启动进程时图书馆?这是不起作用的代码(甚至不打印调试消息)
val p = Process("wc -l")
val io = BasicIO.standard(true)
val lines = Seq("a", "b", "c") mkString "\n"
val buf = lines.getBytes(StandardCharsets.UTF_8)
io withInput { w =>
println("Writing")
w.write(buf)
}
io withOutput { i =>
val s = new BufferedReader(new InputStreamReader(i)).readLine()
println(s"Output is $s")
}
最佳答案
你有几个问题。
首先在您的代码段中,您永远不会将您的流程与 io
联系起来。永远不要运行它。
可以这样做:p run io
.
二、withInput
& withOutput
方法返回 NEW ProcessIO 它们不会改变实际值,并且由于您没有将这些调用的返回值分配给变量,因此您什么都不做。
以下代码段解决了这两个问题,希望它对您有用。
import scala.io.Source
import scala.sys.process._
import java.nio.charset.StandardCharsets
val p = Process("wc -l")
val io =
BasicIO.standard(true)
.withInput { w =>
val lines = Seq("a", "b", "c").mkString("", "\n", "\n")
val buf = lines.getBytes(StandardCharsets.UTF_8)
println("Writing")
w.write(buf)
w.close()
}
.withOutput { i =>
val s = Source.fromInputStream(i)
println(s"Output is ${s.getLines.mkString(",")}")
i.close()
}
p run io
不要怀疑要求澄清。
PS:它打印
"Output is 3"
- (感谢 Dima 指出错误)。
关于scala - 写入处理标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557874/