class StreamConsumer extends Thread{
def inStream
def buf
public StreamConsumer(def input){
inStream = input
buf = new StringBuffer()
}
public void run(){
def reader = new BufferedReader(new InputStreamReader(inStream))
reader.eachLine{ buf.append(it).append('/n')}
}
}
class Exec{
static def doCommand(def cmd){
Process proc = Runtime.getRuntime().exec(cmd)
def error = new StreamConsumer(proc.getErrorStream())
def input = new StreamConsumer(proc.getInputStream())
input.start()
error.start()
proc.waitFor()
input.join()
error.join()
return [
"stdout":input.buf?.toString().trim(),
"stderr":error.buf?.toString().trim(),
]
}
}
def inStream
def buf
public StreamConsumer(def input){
inStream = input
buf = new StringBuffer()
}
public void run(){
def reader = new BufferedReader(new InputStreamReader(inStream))
reader.eachLine{ buf.append(it).append('/n')}
}
}
class Exec{
static def doCommand(def cmd){
Process proc = Runtime.getRuntime().exec(cmd)
def error = new StreamConsumer(proc.getErrorStream())
def input = new StreamConsumer(proc.getInputStream())
input.start()
error.start()
proc.waitFor()
input.join()
error.join()
return [
"stdout":input.buf?.toString().trim(),
"stderr":error.buf?.toString().trim(),
]
}
}
def cmd = 'dir '
def result = Exec.doCommand(cmd);
println result
具体的解释请参考
When Runtime.exec() won't
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=3