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

このJavaの回答から適応 JavaでCMDウィンドウを表示する

import scala.sys.process._   
Seq("cmd", "/c", "start", "PowerShell.exe", "myConsoleApp.exe") run
于 2012-12-12T00:54:23.737 に答える
1

さらにグーグルで調べたところ、私の問題は私がpowershellと呼ぶ方法にあることがわかりました。これが私のために働く解決策です:

Seq("powershell", "Start-Process", "myConsoleApp.exe")
于 2012-12-12T21:59:40.507 に答える
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 に答える