4

在红宝石中,我有:

PTY.spawn("/usr/bin/lxc-monitor -n .+") do |i, o, pid|
  # ...
end

如何在 scala/java 中做到这一点?

4

2 回答 2

3

尝试JPtypty4j。这些是使用 JNA 的 Java 的 pty 实现。

于 2013-08-03T22:37:50.077 回答
2

我不认为 PTY 已被移植到 java/scala。您可以使用 java 中的内置运行时。

  def run() {
    val rt = Runtime.getRuntime
    val cmds = Array("/usr/bin/lxc-monitor", "-n .+")
    val env = Array("TERM=VT100")
    val p1 = rt.exec(cmds, env)
  }

将此页面用作 scala 版本的基础。

更新:

要获得输出,您需要获取输入流并读取它(我知道这听起来倒退,但它是相对于 jvm 的输入)。下面的示例使用 apache commons 来跳过 java 的一些冗长部分。

import java.io.StringWriter
import org.apache.commons.io.IOUtils

class runner {

  def run() {
    val rt = Runtime.getRuntime
    val cmds = Array("/usr/bin/lxc-monitor", "-n .+")
    val env = Array("TERM=VT100")
    val p1 = rt.exec(cmds, env)
    val inputStream = p1.getInputStream

    val writer = new StringWriter()
    IOUtils.copy(inputStream, writer, "UTF-8")
    val output = writer.toString()
    println(output)
  }

}

我从这里得到了 apache utils 的想法。

于 2012-06-09T21:50:05.707 回答