9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/hadupils/extensions.rb', line 9
def self.command(*command_list)
opts = {}
begin
if RUBY_VERSION < '1.9'
Open3.popen3(*command_list) do |i, o, e|
@stdout = o.read
@stderr = e.read
end
@status = $?
$stdout.puts @stdout unless @stdout.nil? || @stdout.empty? || Shell.silence_stdout?
$stderr.puts @stderr unless @stderr.nil? || @stderr.empty?
@stdout = nil unless capture_stdout?
@stderr = nil unless capture_stderr?
else
stdout_rd, stdout_wr = IO.pipe if capture_stdout?
stderr_rd, stderr_wr = IO.pipe if capture_stderr?
opts[:out] = stdout_wr if capture_stdout?
opts[:err] = stderr_wr if capture_stderr?
pid = eval 'Process.spawn(*command_list, opts)'
@status = :waiting unless pid.nil?
Thread.new do
Process.wait pid
@status = $?
end
Thread.new do
if capture_stdout?
stdout_wr.close
@stdout = stdout_rd.read
stdout_rd.close
$stdout.puts @stdout unless @stdout.nil? || @stdout.empty? || Shell.silence_stdout?
end
end
Thread.new do
if capture_stderr?
stderr_wr.close
@stderr = stderr_rd.read
stderr_rd.close
$stderr.puts @stderr unless @stderr.nil? || @stderr.empty?
end
end
sleep 0.1 while @status == :waiting
end
[@stdout, @stderr, @status]
rescue Errno::ENOENT => e
$stderr.puts e
[@stdout, @stderr, nil]
end
end
|