使用Open3.capture3和rake时丢失STDOUT?

时间:2013-11-13 16:00:06

标签: ruby windows rake popen3

我在工作中使用的构建系统调用了几个外部控制台应用程序,Node.js等。

我看到的问题是在调用Open3.capture3后,STDOUT频道似乎无效。例如,我有一个名为compileLess的任务:

desc "Compile LESS"
task :compileLess do
   puts "Preparing to compile LESS..."
   execute "recess less/bootstrap.less --compress > output/css/bootstrap.min.css"
   puts "Finished compiling LESS"
end


def execute(cmdLine, print_stdout = false)
   puts "Executing #{cmdLine}"
   stdout, stderr, status = Open3.capture3(cmdLine)
   puts stdout if print_stdout
   return stdout, stderr, status
end

我期望看到的是:

Preparing to compile LESS...
Executing recess less/bootstrap.less --compress > output/css/bootstrap.min.css
Finished compiling LESS

但是,Open3.capture3调用后的任何内容都会禁用putsprint。我可以通过明确使用:

强制他们工作
STDOUT.puts "goodbye world"

我只是想知道它为什么不起作用。

规格:

  • Window 7 Professional 32位
  • Ruby 1.9.3p392(2013-02-22)[i386-mingw32]
  • Rake,版本10.1.0
  • 节点v0.10.22

1 个答案:

答案 0 :(得分:1)

您使用> output/css/bootstrap.min.css重定向了命令行的STDOUT。

capture3()的STDOUT当然是空的。