Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

Ruby Programming Language

Problems with IO.popen in ruby 1.8.2?


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"

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

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
Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc