gpt4 book ai didi

java - 在 Groovy 中收集执行外部命令的输出的差异

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:27 25 4
gpt4 key购买 nike

以下代码多次卡住(我认为这是阻塞 I/O)(有时可以工作)。

def static executeCurlCommand(URL){
def url = "curl " + URL;
def proc = url.execute();
def output = proc.in.text;
return output;
}

但是当我将代码更改为

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 的问题,并且都提供了第二种方法。虽然效果很好,但我希望我能知道第一种方法有什么问题?有没有人以前遇到过这种情况?

最佳答案

第一种方法填充缓冲区,然后阻塞等待更多空间写入输出。

第二种方法在进程运行时通过单独的线程从缓冲区输出流,因此进程不会阻塞。

关于java - 在 Groovy 中收集执行外部命令的输出的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com