popen(command, mode = "r") -> IO[permalink][rdoc]popen(command, mode = "r") {|f| ... } -> object-
サブプロセスを実行し、そのプロセスの標準入出力との間にパイプラインを確立します。生成したパイプを IO オブジェクトとして返します。
p io = IO.popen("cat", "r+") # => #<IO:fd 4> io.puts "foo" io.close_write p io.gets # => "foo\n"command でサブプロセスを指定します。command はシェルを経由して実行されます。
ブロックが与えられた場合は生成した IO オブジェクトを引数にブロックを実行し、ブロックの実行結果を返します。ブロックの実行後、生成したパイプは自動的にクローズされます。
p IO.popen("cat", "r+") {|io| io.puts "foo" io.close_write io.gets } # => "foo\n"- [PARAM] command:
- コマンド名を文字列で指定します。シェルを経由して実行されます。
- [PARAM] mode:
- オープンする IO ポートのモードを指定します。mode の詳細は Kernel.#open 参照して下さい。
- [EXCEPTION] Errno::EXXX:
- パイプ、あるいは子プロセスの生成に失敗した場合に発生します。
popen("-", mode = "r") -> IO[permalink][rdoc]popen("-", mode = "r") {|io| ... } -> object-
第一引数に文字列 "-" が指定された時、fork(2) を行い子プロセスの標準入出力との間にパイプラインを確立します。親プロセスでは IO オブジェクトを返し、子プロセスでは nil を返します。
io = IO.popen("-", "r+") if io # parent io.puts "foo" p io.gets # => "child output: foo\n" io.close else # child s = gets print "child output: " + s exit endブロックを与えられた場合、親プロセスでは生成した IO オブジェクトを引数にブロックを実行し、その結果を返します。ブロックの実行後、生成したパイプは自動的にクローズされます。子プロセスでは nil を引数にブロックを実行し終了します。
p IO.popen("-", "r+") {|io| if io # parent io.puts "foo" io.gets else # child s = gets puts "child output: " + s end } # => "child output: foo\n"- [PARAM] mode:
- オープンする IO ポートのモードを指定します。mode の詳細は Kernel.#open 参照して下さい。
- [EXCEPTION] Errno::EXXX:
- パイプ、あるいは子プロセスの生成に失敗した場合に発生します。