popen: Add an options argument

Useful for selectively enabling or silencing stderr, for example.
popen_read("foo", err: :err)
This commit is contained in:
Shaun Jackman 2017-09-19 10:18:04 -07:00
parent 5d888c08a3
commit 8bf28477a3

View File

@ -1,20 +1,20 @@
module Utils module Utils
def self.popen_read(*args, &block) def self.popen_read(*args, **options, &block)
popen(args, "rb", &block) popen(args, "rb", options, &block)
end end
def self.popen_write(*args, &block) def self.popen_write(*args, **options, &block)
popen(args, "wb", &block) popen(args, "wb", options, &block)
end end
def self.popen(args, mode) def self.popen(args, mode, options = {})
IO.popen("-", mode) do |pipe| IO.popen("-", mode) do |pipe|
if pipe if pipe
return pipe.read unless block_given? return pipe.read unless block_given?
yield pipe yield pipe
else else
$stderr.reopen("/dev/null", "w") options[:err] ||= :close
exec(*args) exec(*args, options)
end end
end end
end end