Method: Open3.popen2
- Defined in:
- lib/open3.rb
.popen2(*cmd, **opts, &block) ⇒ Object
Open3.popen2 is similar to Open3.popen3 except that it doesn’t create a pipe for the standard error stream.
Block form:
Open3.popen2([env,] cmd... [, opts]) {|stdin, stdout, wait_thr|
pid = wait_thr.pid # pid of the started process.
...
exit_status = wait_thr.value # Process::Status object returned.
}
Non-block form:
stdin, stdout, wait_thr = Open3.popen2([env,] cmd... [, opts])
...
stdin.close # stdin and stdout should be closed explicitly in this form.
stdout.close
See Process.spawn for the optional hash arguments env and opts.
Example:
Open3.popen2("wc -c") {|i,o,t|
i.print "answer to life the universe and everything"
i.close
p o.gets #=> "42\n"
}
Open3.popen2("bc -q") {|i,o,t|
i.puts "obase=13"
i.puts "6 * 9"
p o.gets #=> "42\n"
}
Open3.popen2("dc") {|i,o,t|
i.print "42P"
i.close
p o.read #=> "*"
}
137 138 139 140 141 142 143 144 145 146 |
# File 'lib/open3.rb', line 137 def popen2(*cmd, **opts, &block) in_r, in_w = IO.pipe opts[:in] = in_r in_w.sync = true out_r, out_w = IO.pipe opts[:out] = out_w popen_run(cmd, opts, [in_r, out_w], [in_w, out_r], &block) end |