我正在使用scala.sys.process从我的Scala代码中启动外部控制台应用程序。但是,当控制台应用程序需要用户输入时,我遇到了障碍。
基本上,当我用
启动控制台应用程序时Seq("powershell" , "myConsoleApp.exe").run
myConsoleApp.exe不会在自己的“窗口”中启动。当我检查任务管理器时,我可以看到控制台应用程序正在运行。没有实际的窗口,我无法真正键入任何东西。
我知道Scala可以将程序输出返回给String或Stream [String] - 我猜Scala也可能能够将输入管道输入到外部进程。
但我真的不想在Scala中重写这样的逻辑,因为所有这些逻辑在外部程序中都已经可用。
我想知道是否有办法在自己的窗口中启动外部控制台程序?或者这是scala.sys.process的缺点。
谢谢,
答案 0 :(得分:1)
改编自这篇Java答案Show the CMD window with Java
import scala.sys.process._
Seq("cmd", "/c", "start", "PowerShell.exe", "myConsoleApp.exe") run
答案 1 :(得分:1)
经过一些谷歌搜索,我发现我的问题更多的是我称之为powershell的方式。 这是一个适合我的解决方案:
Seq("powershell", "Start-Process", "myConsoleApp.exe")
答案 2 :(得分: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()