[open3] only close streams if a block is passed
Ref: 5429deb075beb9a2b67adae269bbac16325876d1 The previous change totally borke `popen2e` in this usage: ```ruby require 'open3' stdin, stdout, process = Open3.popen2e("cat") puts stdout.read ```
This commit is contained in:
parent
42b4234ba4
commit
adbdf11f94
Notes:
git
2020-06-19 02:00:49 +09:00
10
lib/open3.rb
10
lib/open3.rb
@ -207,10 +207,12 @@ module Open3
|
||||
|
||||
popen_run(cmd, opts, [in_r, out_w], [in_w, out_r], &block)
|
||||
ensure
|
||||
in_r.close
|
||||
in_w.close
|
||||
out_r.close
|
||||
out_w.close
|
||||
if block
|
||||
in_r.close
|
||||
in_w.close
|
||||
out_r.close
|
||||
out_w.close
|
||||
end
|
||||
end
|
||||
module_function :popen2e
|
||||
|
||||
|
@ -149,6 +149,17 @@ class TestOpen3 < Test::Unit::TestCase
|
||||
}
|
||||
end
|
||||
|
||||
def test_popen2e_noblock
|
||||
i, o, t = Open3.popen2e(RUBY, '-e', 'STDOUT.print STDIN.read')
|
||||
i.print "baz"
|
||||
i.close
|
||||
assert_equal("baz", o.read)
|
||||
ensure
|
||||
i.close
|
||||
o.close
|
||||
t.join
|
||||
end
|
||||
|
||||
def test_capture3
|
||||
o, e, s = Open3.capture3(RUBY, '-e', 'i=STDIN.read; print i+"o"; STDOUT.flush; STDERR.print i+"e"', :stdin_data=>"i")
|
||||
assert_equal("io", o)
|
||||
|
Loading…
x
Reference in New Issue
Block a user