@@ -16,6 +16,11 @@ def initialize
1616 @existing = existing_display?
1717 @enabled = false
1818 @pid = nil
19+
20+ @xv_pipe_out_wr = nil
21+ @xv_pipe_err_wr = nil
22+ @xv_pipe_out = nil
23+ @xv_pipe_err = nil
1924 end
2025
2126 # attempt to determine if the machine is running a graphical display (i.e. not Travis)
@@ -71,6 +76,8 @@ def enable
7176 end
7277
7378 return unless @pid . nil? # TODO: disable first?
79+ @xv_pipe_out . close unless @xv_pipe_out . nil?
80+ @xv_pipe_err . close unless @xv_pipe_err . nil?
7481
7582 # open Xvfb
7683 xvfb_cmd = [
@@ -81,8 +88,11 @@ def enable
8188 "-screen" , "0" ,
8289 "1280x1024x16" ,
8390 ]
84- puts "pipeline_start for Xvfb"
85- pipe = IO . popen ( xvfb_cmd )
91+ puts "Xvfb launching"
92+
93+ @xv_pipe_out , @xv_pipe_out_wr = IO . pipe
94+ @xv_pipe_err , @xv_pipe_err_wr = IO . pipe
95+ pipe = IO . popen ( xvfb_cmd , stdout : @xv_pipe_out_wr , err : @xv_pipe_err_wr )
8696 @pid = pipe . pid
8797 @enabled = xvfb_launched? ( DESIRED_DISPLAY , @pid , 30 )
8898 end
@@ -109,6 +119,9 @@ def disable
109119 Process . wait @pid
110120 @enabled = false
111121 @pid = nil
122+
123+ @xv_pipe_out_wr . close
124+ @xv_pipe_err_wr . close
112125 end
113126 end
114127
@@ -133,14 +146,11 @@ def run(*args, **kwargs)
133146 env_vars . merge! ( args [ 0 ] ) if has_env
134147 actual_args = has_env ? args [ 1 ..-1 ] : args # need to shift over if we extracted args
135148 full_cmd = env_vars . empty? ? actual_args : [ env_vars ] + actual_args
136-
137- puts "Running #{ env_vars } $ #{ actual_args . join ( ' ' ) } "
138- puts "Full_cmd is #{ full_cmd } "
139- puts "kwargs is #{ kwargs } "
149+ shell_vars = env_vars . map { |k , v | "#{ k } =#{ v } " } . join ( " " )
150+ puts " $ #{ shell_vars } #{ actual_args . join ( ' ' ) } "
140151 ret = system ( *full_cmd , **kwargs )
141- puts "system call to #{ actual_args [ 0 ] } has completed"
152+ puts "#{ actual_args [ 0 ] } has completed"
142153 end
143- puts "with_display has completed"
144154 ret
145155 end
146156
0 commit comments