Forum: Ruby Problems with IO.popen in ruby 1.8.2?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Todd A. Jacobs (Guest)
on 2007-06-05 23:03
(Received via mailing list)
I have the following code snippet:

    sleep 0.3
    IO.popen('/usr/bin/xclip -o').readlines {|f| print}

running in a tight loop. If I let it run for a short time (about 25
seconds), I get this error:

    Enter URL: ./dice.rb:89:in `popen': Too many open files -
/usr/bin/xclip -o (Errno::EMFILE)
      from ./dice.rb:89:in `read'
      from ./dice.rb:181
      from ./dice.rb:162:in `loop'
      from ./dice.rb:162

I don't understand the nature of the error, since the pipe is implicitly
closed when the block exits, right? Event if I change the line to:

    IO.popen('/usr/bin/xclip -o').readlines {|f| print; f.close}

I still have the same problem. So, what file resource is being consumed,
and how do I fix it?
ara.t.howard (Guest)
on 2007-06-06 00:06
(Received via mailing list)
On Jun 5, 2007, at 1:02 PM, Todd A. Jacobs wrote:

>       from ./dice.rb:89:in `read'
> I still have the same problem. So, what file resource is being
> consumed,
> and how do I fix it?

read carefully - you've given the block to readlines - not popen.
invert your logic

  IO.popen(cmd) do |pipe|
           pipe.readlines{|line| print line}
         end


>
> --
> "Oh, look: rocks!"
>   -- Doctor Who, "Destiny of the Daleks"
>

-a
This topic is locked and can not be replied to.