Writing to a process pipe

Okay, I know this is an easy one, but I can't find it documented and I can't find an example in any libraries. Yes, I'm sure it's in the documentation but I can't find it, and yes I'm sure there are examples, but I can't find them.

I need to write to stdin on another process. In perl, this would look like:

open PIPE, "| process";
print PIPE "stuff\n";
close PIPE;

Of course, I tried a couple different iterations of that:

File.open("| process", "w") { |file| ... }
IO.open("| process", "w") { |file| ... }
IO.popen("| process", "w") { |file| ... }

All of them fail, or I would not be sending this. So, what's the secret? Like I said, I'm sure it's easy, but I can't find it. Apparently my Google-fu is not up to snuff today...

Thanks,
Luke

···

--
The easiest way to figure the cost of living is to take your income and
add ten percent.
---------------------------------------------------------------------
Luke Kanies | http://abstractive.org | http://reductiveconsulting.com

File.open("| process", "w") { |file| ... }
IO.open("| process", "w") { |file| ... }
IO.popen("| process", "w") { |file| ... }

svg% ruby -e 'open("| cat", "w") {|f| f.puts "it s just Kernel#open"}'
it s just Kernel#open
svg%

Guy Decoux

Okay, I know this is an easy one, but I can't find it documented and I
can't find an example in any libraries. Yes, I'm sure it's in the
documentation but I can't find it, and yes I'm sure there are examples,
but I can't find them.

I need to write to stdin on another process. In perl, this would look
like:

open PIPE, "| process";
print PIPE "stuff\n";
close PIPE;

Of course, I tried a couple different iterations of that:

File.open("| process", "w") { |file| ... }
IO.open("| process", "w") { |file| ... }
IO.popen("| process", "w") { |file| ... }

All of them fail, or I would not be sending this. So, what's the secret?
Like I said, I'm sure it's easy, but I can't find it. Apparently my
Google-fu is not up to snuff today...

Thanks,
Luke

   irb(main):001:0> pipe = IO.popen 'cat', 'r+'
   => #<IO:0xb740a4d8>

   irb(main):002:0> pipe.puts 'foobar'
   => nil

   irb(main):003:0> pipe.gets
   => "foobar\n"

check this out if you need more control:

   http://www.codeforpeople.com/lib/ruby/session/

-a

···

On Tue, 8 Jun 2004, Luke A. Kanies wrote:

--
The easiest way to figure the cost of living is to take your income and
add ten percent.
---------------------------------------------------------------------
Luke Kanies | http://abstractive.org | http://reductiveconsulting.com

--

EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
PHONE :: 303.497.6469
A flower falls, even though we love it; and a weed grows, even though we do
not love it. --Dogen

===============================================================================

This is what I was looking for. I don't know why I was so hung up on needing the '|' character; opening a pipe with 'w' as an argument worked fine. Duh.

I knew it was easy. Thanks.

···

On Wed, 9 Jun 2004, Ara.T.Howard wrote:

irb(main):001:0> pipe = IO.popen 'cat', 'r+'
=> #<IO:0xb740a4d8>

irb(main):002:0> pipe.puts 'foobar'
=> nil

irb(main):003:0> pipe.gets
=> "foobar\n"

--
If smiling uses so fewer muscles than frowning, how come it hurts my face so much?
---------------------------------------------------------------------
Luke Kanies | http://abstractive.org | http://reductiveconsulting.com