0

我正在尝试允许其他用户通过网络访问某些本地系统服务。

经过一番 google,我最终选择使用 Play 框架作为前端来接受 web 服务调用。接到电话后,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 回答