我在工作中使用的构建系统调用了几个外部控制台应用程序,Node.js等。
我看到的问题是 STDOUT 通道在调用 Open3.capture3
后似乎不起作用。例如,我有一个名为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
之后的任何内容都会禁用puts
和print
。我可以通过显式使用以下命令来强制它们工作:
STDOUT.puts "goodbye world"
我只想知道为什么它不起作用。
规格:
- 窗口 7 专业 32 位
- 红宝石 1.9.3p392 (2013-02-22) [i386-mingw32]
- Rake,版本 10.1.0
- 节点 v0.10.22
您使用 > output/css/bootstrap.min.css
重定向了命令行的 STDOUT
当然,您来自capture3()
的STDOUT是空的。