2

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

基本上,当我启动控制台应用程序时

Seq("powershell" , "myConsoleApp.exe").run

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

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

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

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

谢谢,

4

3 回答 3

1

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

Seq("powershell", "Start-Process", "myConsoleApp.exe")
于 2012-12-12T21:59:40.507 回答
1

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

import scala.sys.process._   
Seq("cmd", "/c", "start", "PowerShell.exe", "myConsoleApp.exe") run
于 2012-12-12T00:54:23.737 回答
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()
于 2012-12-12T01:01:09.197 回答