我正在尝试通过网络允许某些本地系统服务访问其他用户。
经过一些googleing,我最终选择使用Play框架作为接受webservice调用的前端。收到呼叫后,Play将通过powershell执行一些命令。如,
在我的Application.scala
中def test = Action {
println(Seq("powershell.exe", "dir", "c:").!)
Ok("")
}
相应的路线信息是
GET /test controllers.Application.test
我的问题是虽然对PowerShell的调用结果被打印出来,但该方法永远不会返回。从客户端(浏览器)的角度来看,它只是等待调用... / test返回。
我已经测试了代码本身并且运行正常。我的问题似乎只有在我通过Play运行时才会出现。
非常感谢任何建议!
答案 0 :(得分:0)
来自ProcessBuilder
scaladoc:
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()
即可。创建一个actor并从解析Stream
的线程向他发送一条消息,它应该关闭进程。或者使用CountDownLatch
等待它,这是一种更加Java的方式。