Java Groovy中执行外部命令时收集输出的差异
下面的代码多次被卡住(我认为是阻塞了I/O)(有时会起作用) 但是当我把代码改成Java Groovy中执行外部命令时收集输出的差异,java,groovy,process,io,Java,Groovy,Process,Io,下面的代码多次被卡住(我认为是阻塞了I/O)(有时会起作用) 但是当我把代码改成 def static executeCurlCommand(URL){ def url = "curl " + URL; def proc = url.execute(); def outputStream = new StringBuffer(); proc.waitForProcessOutput(outputStream, System.err) return outp
def static executeCurlCommand(URL){
def url = "curl " + URL;
def proc = url.execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err)
return outputStream.toString();
}
每次都很好用。我不明白为什么第一种方式,即通过proc.in.text
获取输入会挂起一段时间?当我在Windows和cygwin上尝试时,它看起来并不是一个特定于环境的问题
要测试/运行我尝试过的上述方法-
public static void main(def args){
def url = 'http://mail.google.com';
println("Output : " + executeCurlCommand(url));
}
我已经看到了许多关于SO的问题,并且都提供了第二种方法。虽然效果很好,但我希望我能知道第一种方法有什么问题?以前有人遇到过这种情况吗?第一种方法将缓冲区填满,然后阻塞等待更多空间将输出写入 第二种方法是在进程运行时通过一个单独的线程从缓冲区输出流,这样进程就不会阻塞
public static void main(def args){
def url = 'http://mail.google.com';
println("Output : " + executeCurlCommand(url));
}