以交互模式从Scala启动外部控制台应用程序

时间:2012-12-11 22:01:40

标签: scala

我正在使用scala.sys.process从我的Scala代码中启动外部控制台应用程序。但是,当控制台应用程序需要用户输入时,我遇到了障碍。

基本上,当我用

启动控制台应用程序时
Seq("powershell" , "myConsoleApp.exe").run

myConsoleApp.exe不会在自己的“窗口”中启动。当我检查任务管理器时,我可以看到控制台应用程序正在运行。没有实际的窗口,我无法真正键入任何东西。

我知道Scala可以将程序输出返回给String或Stream [String] - 我猜Scala也可能能够将输入管道输入到外部进程。

但我真的不想在Scala中重写这样的逻辑,因为所有这些逻辑在外部程序中都已经可用。

我想知道是否有办法在自己的窗口中启动外部控制台程序?或者这是scala.sys.process的缺点。

谢谢,

3 个答案:

答案 0 :(得分:1)

改编自这篇Java答案Show the CMD window with Java

import scala.sys.process._   
Seq("cmd", "/c", "start", "PowerShell.exe", "myConsoleApp.exe") run

答案 1 :(得分:1)

经过一些谷歌搜索,我发现我的问题更多的是我称之为powershell的方式。 这是一个适合我的解决方案:

Seq("powershell", "Start-Process", "myConsoleApp.exe")

答案 2 :(得分:0)

这将从Scala控制台以交互方式运行,复制并:paste

val con = System.console
new java.lang.Thread() {
  val in = new java.lang.Thread() {
    override def run() {
      while (true) { 
        Thread.sleep(1)
        if (con.reader.ready)
          con.reader.read()        
      }       
    }
  }
  override def run() { 
    in.start()
    while (true) { 
      Thread.sleep(1000)
      con.printf("\nHai")
    }
  }
}.start()