我有一个简单的Kotlin代码片段
import java.io.*
import java.util.concurrent.TimeUnit.MINUTES
import java.util.concurrent.TimeUnit
val proc = ProcessBuilder("C:\\tools\\build\\maven\\3.6.1\\bin\\mvn.cmd")
.directory(null)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start()
println("Started")
proc.waitFor(60, TimeUnit.MINUTES)
println("Ended")
val output : String = proc.inputStream.bufferedReader().readText()
println("Output : " + output)
var log : File = File("cmd.log")
log.writeText(output)
此代码运行命令然后将输出保存为字符串,然后将输出打印到控制台 但是,在外部程序完成时会进行打印。 我的问题是: 我想以实时模式查看程序输出。 从其他方面来说,我希望看到外部程序在工作时的输出。 这段代码作为Kotlin脚本运行:kotlinc -script script.ktc
如果放置字符串
val output : String = proc.inputStream.bufferedReader().readText()
在waitFor调用之前。我观察到执行被阻止了
答案 0 :(得分:0)
很抱歉,这个问题很简单,我今天找到了简单的答案。
val proc = ProcessBuilder("ls", "-lR", "c:\\toolchains")
.directory(null)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start()
println("Started")
val output: BufferedReader = proc.inputStream.bufferedReader()
var line: String? = output.readLine()
val log: File = File("cmd.log")
while (line != null) {
println("Next Line " + line)
log.appendText(line.toString() + System.lineSeparator())
line = output.readLine()
}
proc.waitFor(60, TimeUnit.MINUTES)
println("Ended")