🏭

Open3の使い方チートシート風まとめ

2022/09/10に公開

Ruby の Open3モジュール を使おうとしたとき open とか capture とか 2 とか 3 とかがごっちゃごちゃになってしまい、差異だけを知りたくて公式ドキュメントを読むものの詳しすぎて全容が把握できず、結局適切なメソッドを適切に使えているのか怪しいまま、とりあえず動いたからまーいいかを何回も繰り返してしまっているので自分用にまとめたものです。

戻値 Method stdin_data binmode 2>&1 block
stdin, stdout, stderr, thread popen3
stdin, stdout_or_stderr, thread popen2e
🞨 stdin, stdout, thread popen2
body, error_body, status capture3
body, status capture2e
🞨 body, status capture2
戻値 Method block
statuses pipeline
threads pipeline_start
stdout, threads pipeline_r
stdin, stdout, threads pipeline_rw
stdin, threads pipeline_w
column 意味
戻値 ブロック対応の場合は同じ並びで受け取れる
stdin_data stdin_data: "xxx" で入力を渡せる
binmode binmode: true でバイナリモードになる
2>&1 エラー出力を標準出力とする
block ブロックに対応している
pipeline* の引数のタイプ
commandline
[commandline, options]
[env, commandline, options]
[env, cmdname, arg1, arg2, ..., options]
[env, [cmdname, argv0], arg1, ..., options]
  • 基本 popen3 だけ使っていればなんら問題ない
  • そこで標準入力を渡すのに複数行書くのが耐えられないとなったら capture3 を使う
  • 2>&1 の表記も耐えられないとなったら e で終わるメソッド使う
  • 2 で終わるメソッドはエラーを見なかったふりするようなものなので忘れていい
  • pipeline* のことも全部忘れていい

Discussion

ログインするとコメントできます