我有一个目前正通过延迟工作执行的课程。其中一项任务是执行“rake spec”并重定向输出。
我是这样做的:
class Executor
def execute_command(cmd, &block)
STDOUT.sync = true # That's all it takes...
IO.popen(cmd + " 2>&1") do |pipe| # Redirection is performed using operators
pipe.sync = true
while str = pipe.gets
block.call str # This is synchronous!
end
end
return $?.success?
end
end
然而,没有输出出现,甚至不知道正确执行单元测试。
Capistrano工作,它适用于OSX。我的服务器是运行Passenger的Ubuntu。
任何人都有任何想法为什么输出不会重定向?
由于
本
答案 0 :(得分:2)
尝试在cmd上没有STDFDES重定向 这是我使用的和我得到的。
class Executor
def execute_command(cmd, &block)
STDOUT.sync = true # That's all it takes...
IO.popen(cmd) do |pipe| # Redirection is performed using operators
pipe.sync = true
while str = pipe.gets
block.call str # This is synchronous!
end
end
return $?.success?
end
end
经过测试:
ex = Executor.new
ex.execute_command "ps aux" do |str|
p str
end
结果:
“用户PID%CPU%MEM VSZ RSS TT STAT启动
TIME COMMAND \ n“”mitch 423 3.4 1.0 2750692 159552 ?? S 23Apr12 19:41.59 /Users/mitch/iTerm.app/Contents/MacOS/iTerm -psn_0_40970 \ n“”_windowserver 90 3.1 1.8 3395124 301576 ?? Ss 20Apr12 75:19.86 /System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Resources/WindowServer -daemon \ n“”mitch 78896 2.0 0.8 1067248 136088 ?? R Thu03PM 37:46.59 /Applications/Spotify.app/Contents/MacOS/Spotify -psn_0_4900012 \ n“”mitch 436 1.8 1.0 1063952 169320 ?? S 23Apr12 100:23.87 /Applications/Skype.app/Contents/MacOS/Skype-psn_0_90134 \ n“