首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby中获取system()调用的输出

在Ruby中获取system()调用的输出
EN

Stack Overflow用户
提问于 2009-03-27 23:12:54
回答 16查看 275.9K关注 0票数 329

如果我在Ruby语言中使用Kernel#system调用一个命令,我如何获得它的输出?

代码语言:javascript
运行
复制
system("ls")
EN

Stack Overflow用户

发布于 2013-05-17 06:47:48

虽然使用反引号或popen通常是你真正想要的,但它实际上并没有回答所提出的问题。捕获system输出可能有合理的理由(可能是为了自动化测试)。我在谷歌上搜索了一下turned up an answer,我想我应该把它贴在这里,以便于其他人受益。

因为我需要这个来测试,所以我的示例使用一个块设置来捕获标准输出,因为实际的system调用隐藏在被测试的代码中:

代码语言:javascript
运行
复制
require 'tempfile'

def capture_stdout
  stdout = $stdout.dup
  Tempfile.open 'stdout-redirect' do |temp|
    $stdout.reopen temp.path, 'w+'
    yield if block_given?
    $stdout.reopen stdout
    temp.read
  end
end

此方法使用tempfile存储实际数据来捕获给定块中的任何输出。示例用法:

代码语言:javascript
运行
复制
captured_content = capture_stdout do
  system 'echo foo'
end
puts captured_content

您可以用内部调用system的任何内容替换system调用。如果需要,您还可以使用类似的方法来捕获stderr

票数 13
EN
查看全部 16 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/690151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档