[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)
|
popen_run(cmd, opts, [in_r, out_w], [in_w, out_r], &block)
|
||||||
ensure
|
ensure
|
||||||
in_r.close
|
if block
|
||||||
in_w.close
|
in_r.close
|
||||||
out_r.close
|
in_w.close
|
||||||
out_w.close
|
out_r.close
|
||||||
|
out_w.close
|
||||||
|
end
|
||||||
end
|
end
|
||||||
module_function :popen2e
|
module_function :popen2e
|
||||||
|
|
||||||
|
@ -149,6 +149,17 @@ class TestOpen3 < Test::Unit::TestCase
|
|||||||
}
|
}
|
||||||
end
|
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
|
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")
|
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)
|
assert_equal("io", o)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user