我有一个Rakefile和一个Rake任务,我通常会从命令行调用它:

rake blog:post Title

我想编写一个Ruby脚本,多次调用该Rake任务,但我看到的唯一解决方案是使用`(backticks)或system来完成.

正确的方法是什么?

推荐答案

timocracy.com开始:

require 'rake'

def capture_stdout
  s = StringIO.new
  oldstdout = $stdout
  $stdout = s
  yield
  s.string
ensure
  $stdout = oldstdout
end

Rake.application.rake_require 'metric_fetcher', ['../../lib/tasks']
results = capture_stdout {Rake.application['metric_fetcher'].invoke}

Ruby相关问答推荐

在 ruby​​ 中提取文档中的主题标签和部分

while 语句的主体是块吗?

Faraday中的timeout和open timeout是什么?

方法应该以 (?问号)结尾吗?只返回一个布尔值?

由模块中定义的另一个覆盖方法

出于调试目的,如何打印有关 NET:HTTPRequest 的信息?

判断 Ruby Gem 的可用性

在 Ruby 中,获取第一个块返回 true 的可枚举元素的最快方法是什么?

如何将 each每个方法添加到 Ruby 对象(或者我应该扩展 Array)?

如何找到安装 Ruby Gem 的路径(即 Gem.lib_path c.f. Gem.bin_path)

Ruby 中数组和哈希的性能

Ruby 的排序方法使用哪种算法?

ActionController::UnknownFormat

如何将值保存到 YAML 文件中?

将哈希转换为 struct

如何在 Ruby 中找到除法的余数?

Ruby 中的标准文件命名约定

ActiveSupport::Memoizable 指的是哪种 Ruby memoize 模式?

如何测试数组中的所有项目是否相同?

工厂女孩 - 目的是什么?