我在 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>'
如果我将代码更改为调用popen3
:
Open3.popen3(cmd, '')
我没有收到Errno::ENOENT
错误,而是收到帮助消息,但我想要"Hello World"
输出。
我搜索了一个解决方案,但没有任何效果,包括“为什么 Open3.popen3 在可执行文件丢失时返回错误错误? ”的答案。
为什么我会收到此错误,我该如何解决?