如何将Ruby脚本的输出管道传输到“head”而不会发生故障错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我有一个简单的Ruby脚本,如下

require 'csv'
while line = STDIN.gets
  array = CSV.parse_line(line)
  puts array[2]
end

但是,当我尝试在Unix管道中使用这个脚本时,我得到了10行输出,然后是一个错误:

ruby lib/myscript.rb < data.csv  | head

12080450
12080451
12080517
12081046
12081048
12081050
12081051
12081052
12081054
lib/myscript.rb:4:in `write': Broken pipe - <STDOUT> (Errno::EPIPE)

提问于
用户回答回答于

head在读取完所有需要的数据后关闭标准输出流。应该处理异常并停止写入标准输出。一旦标准输出关闭,以下代码将中止循环:

while line = STDIN.gets
  array = CSV.parse_line(line)
  begin
    puts array[2]
  rescue Errno::EPIPE
    break
  end
end
用户回答回答于

扫码关注云+社区