如何使用PTY在Scala中生成进程?

时间:2012-06-09 18:29:22

标签: java scala spawn pty lxc

在红宝石中我有:

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

scala / java中的这个怎么做?

2 个答案:

答案 0 :(得分:2)

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

  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)
  }

我使用this页面作为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)
  }

}

我从here获得了apache utils的想法。

答案 1 :(得分:2)

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