在groovy中,我试图使用Process
运行两次使用git的调用:
def fireCommand(String command) {
def proc = command.execute()
proc.waitFor()
println "Process exit code: ${proc.exitValue()}"
def result = proc.in.text
println "Std Err: ${proc.err.text}"
println "Std Out: ${proc.in.text}"
}
def executeOnShell(String command) {
fireCommand("git --version")
fireCommand("git status")
}
但只有第一个电话有效。第二个电话会抛出:
java.io.IOException: Stream closed
根据我的理解,我不会重复使用相同的过程,为什么会出错?
答案 0 :(得分:3)
当您使用inputStream.text
或inputStream.getText()
方法时,输入流在方法返回结果之前关闭 - 流的内容(作为String)。所以当你打电话时
println "Std Out: ${proc.in.text}"
它试图从已经关闭的同一个流中读取。
println "Std Out: $result"
会好的。