test.rb に次のコードがあります。
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
:
- それは出力します
"Hello world!"
- のような任意の引数を指定すると
bar.exe /blah
、ヘルプ メッセージが出力されます。
実行する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>'
コードを call に変更するとpopen3
:
Open3.popen3(cmd, '')
エラーは表示されずErrno::ENOENT
、代わりにヘルプ メッセージが表示されますが、"Hello World"
出力が必要です。
解決策を探しましたが、「実行可能ファイルが見つからないときに Open3.popen3 が間違ったエラーを返すのはなぜですか?」への回答を含め、何も機能していません。
このエラーが発生する理由と解決方法を教えてください。