[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Problems with IO.popen in ruby 1.8.2?

Todd A. Jacobs

6/5/2007 7:02:00 PM

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?

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

1 Answer

ara.t.howard

6/5/2007 8:05:00 PM

0


On Jun 5, 2007, at 1:02 PM, Todd A. Jacobs wrote:

> 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?

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
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama