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}

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

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