gpt4 book ai didi

ruby - Ruby 中的 Kernel#select 有什么意义?

转载 作者:IT王子 更新时间:2023-10-29 01:10:34 26 4
gpt4 key购买 nike

我正在编写一个 ruby​​ 脚本,该脚本最终会启动一个需要相当长一段时间的系统进程。我需要从这个过程的 stderr 中读取并根据输出的内容对其使用react。

我目前是这样做的:

Open3.popen3(cmd_to_run) do |stdin, stdout, stderr, waitthread|
stderr.each_line do |line|
# look out for specific lines and react to them accordingly
end
end

但我也看到实现类似的东西但使用 kernel#select 实现:

Open3.popen3(cmd_to_run) do |stdin, stdout, stderr, waitthread|
io = select([stderr], nil, nil, 30)

if io.nil?
log("Command timed out during Kernel#select")
return
end

io[0][0].each_line do |line|
# look out for specific lines and react to them accordingly
end

end

我已经阅读了关于 select 功能的镐描述,但我对为什么我应该(或者如果我应该)使用它感到困惑?第一种方法的工作原理是一样的。

最佳答案

可能有两个原因:

  1. 您可以使用超时,而您不能使用 each_line
  2. 您可以等待多个IO 对象,例如。 G。 io = select([stdout, stderr]) 和不止一个事件(例如也写事件或异常)

关于ruby - Ruby 中的 Kernel#select 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9805851/

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