上ENOENT私はtest.rbに次のコードを持っている:Open3.popen3は間違ったエラーエラー番号を返す:: Windowsの
require 'open3'
cmd = 'C:\Program Files\foo\bar.exe'
Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
puts "stdout: #{stdout.read}"
puts "\n\n"
puts "stderr: #{stderr.read}"
end
bar.exe
はC:\Program Files\foo\
に位置して、私が作成したコンソールアプリケーションです。私はbar.exe
を実行すると:それはbar.exe /blah
のように、任意の引数を指定して"Hello world!"
- 、それはヘルプメッセージを出力します。
私はruby test.rb
を実行すると、私はこのエラーを取得:
C:\RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/open3.rb:193:in 'spawn': No such file or directory - C:\Program Files\foo\bar.exe (Errno::ENOENT)
from C:\RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/open3.rb:193:in 'popen_run'
from C:\RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/open3.rb:193:in 'popen3'
from test.rb:3:in '<main>'
私はpopen3
を呼び出すようにコードを変更した場合:
Open3.popen3(cmd, '')
私は私が得る代わりに、Errno::ENOENT
エラーを得ることはありませんヘルプメッセージが表示されますが、出力は"Hello World"
です。
私は解決策を探しましたが、 "Why does Open3.popen3 return wrong error when executable is missing?"への回答を含め、何も動作していません。
なぜこのエラーが発生しますか?どのように解決しますか?
「C:/ Program Files/foo/bar.exe」は代わりに動作しますか? – tadman