gpt4 book ai didi

scala - 写入处理标准输入

转载 作者:行者123 更新时间:2023-12-01 03:09:32 25 4
gpt4 key购买 nike

如何将某种可写流连接到 stdin (以及连接到 stdoutstderr 的可读流)通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com