Hi, all.

win32_popen is popen2,popen3,popen4 implementation on Windows adapted from
Python source code.

You can use win32_popen3 like this:

require 'win32_popen'

fin,fout,ferr = IO.win32_popen3("date")
puts fout.gets
fin.print "2002-01-01\n"
while !fout.eof
puts fout.gets
end

fin,fout,ferr = IO.win32_popen3("irb")

begin
a = fout.getc
putc a.chr
end while a != ?>

fin.print "exit\n"

while !fout.eof
puts fout.gets
end


You can download mswin binary for your Ruby version.
http://home.nownuri.net/~phasis/popen/win32_popen_1.6.8.zip
http://home.nownuri.net/~phasis/popen/win32_popen_1.8.0.zip
Souce code and binary included.

[Requirement]

* Ruby 1.6.5+

It may be made with other version but not verified.

[Install binary]

 > ruby install.rb

[Install from source]

 > ruby extconf.rb
 > nmake
 > ruby install.rb

[methods]

IO#win32_popen2(cmd[, mode])
Executes cmd as a sub-process. Returns the file objects (child_stdin,
child_stdout).

IO#win32_popen3(cmd[, mode])
Executes cmd as a sub-process. Returns the file objects (child_stdin,
child_stdout, child_stderr).

IO#win32_popen4(cmd[, mode]])
Executes cmd as a sub-process. Returns the file objects (child_stdin,
child_stdout_and_stderr).

Regards.

Park Heesob