Open3.capture3で存在しないコマンドを実行した場合、第3戻り値はnilになる


概要

Open3.capture3で存在しないコマンドを実行した場合の挙動が私の考えていたものと異なったので記載します。


Open3.capture3で存在しないコマンドを実行した場合

まずOpen3.capture3は、コマンドを直接実行し、標準出力(stdout_str)、標準エラー出力(stderr_str)、終了コード(status)を返します。

存在しないコマンドが指定されていた場合、statusが Process::Statusを返すことを想定していましたがnilになるので注意です。

そもそもコマンドが実行できていないので、終了コードは存在しません。

require 'open3'

begin
stdout_str, stderr_str, status = Open3.capture3('not_found_command')
rescue => ex
raise unless status.success?
end


バージョン


  • ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]


参考資料