0

一部のローカルシステムサービスへのアクセスをWeb経由で他のユーザーに許可しようとしています。

いくつかのグーグルの後、私はWebサービス呼び出しを受け入れるためのフロントエンドとして機能するためにPlayフレームワークを使用することを選択することになりました。呼び出しを受信すると、PlayはPowerShellを介していくつかのコマンドを実行します。例えば、

私のApplication.scalaで

def test = Action {
    println(Seq("powershell.exe", "dir", "c:").!)
    Ok("")
}

対応するルート情報は

GET      /test     controllers.Application.test

私の問題は、PowerShellの呼び出しの結果が出力されても、メソッドが返されないことです。クライアント(ブラウザ)の観点からは、.../testへの呼び出しが戻るのを継続的に待機します。

コード自体をテストしましたが、正常に実行されました。私の問題は、Playを実行したときにのみ発生するようです。

どんなアドバイスも大歓迎です!

4

1 に答える 1

0

ProcessBuilderスカドックから:

abstract def !(log: ProcessLogger): Int
    Starts the process represented by this builder, blocks until it exits, 
    and returns the exit code.

lines代わりに使用してみてください- それはStream

編集

コマンドが既に完了している場合、その出力をストリームから読み取っていませんか? その後、Process.destroy()別のストリームから手動で呼び出すだけです。アクターを作成し、解析するスレッドからメッセージを送信すると、Streamプロセスを閉じる必要があります。または、CountDownLatchfow awaiting を使用します。これは、より Java 的な方法です。

于 2012-12-14T01:35:48.673 に答える