Here's something I've never figured out.

Suppose I want real two-way communication with a process via popen.
This seems doable.

But apparently the read hangs until I do a close_write; and if I
do that, I can't write again. A flush doesn't work.

Here's what I was thinking (simplified):

   io = IO.popen("/bin/bash","r+") do |f|
     f.puts "ls"
     puts f.readlines
     f.puts "date"
     puts f.readlines
   end

I even tried this (following) abomination, to no avail:

   io = IO.popen("/bin/bash","r+") do |f|
     writer = f.dup
     f.puts "ls\n"
     f.close_write
     puts f.readlines
     w = writer.dup
     w.puts "date\n"
     w.close_write
     puts f.readlines
   end


Can someone advise?


Hal