Ruby中调用执行shell命令的6种方法

 更新时间:2014年10月11日 13:30:23   作者:琼楼玉宇  
这篇文章主要介绍了Ruby中调用执行shell命令的6种方法,本文罗列了Ruby中可以调用和执行Linux系统Shell命令的6个方法,需要的朋友可以参考下

碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法:

1.Exec方法:

Kernel#exec方法通过调用指定的命令取代当前进程例子:

复制代码 代码如下:

      $ irb
      >> exec 'echo "hello $HOSTNAME"'
         hello nate.local
      $

值得注意的是,exec方法用echo命令来取代了irb进程从而退出了irb。主要的缺点是,你无法从你的ruby脚本里知道这个命令是成功还是失败。

2.System方法

Kernel#system方法操作命令同上, 但是它是运行一个子shell来避免覆盖当前进程。如果命令执行成功则返回true,否则返回false。

复制代码 代码如下:

 $ irb            
  >> system 'echo "hello $HOSTNAME"'
  hello nate.local
  => true
  >> system 'false'
  => false
  >> puts $?
  256
  => nil
  >>

3.反引号(Backticks,Esc键下面那个键)

复制代码 代码如下:

$ irb
  >> today = `date`
  => "Mon Mar 12 18:15:35 PDT 2007n"
  >> $?
  => #<Process::Status: pid=25827,exited(0)>
  >> $?.to_i
  => 0

这种方法是最普遍的用法了。它也是运行在一个子shell中。

4.IO#popen

复制代码 代码如下:

  $ irb
  >> IO.popen("date") { |f| puts f.gets }
  Mon Mar 12 18:58:56 PDT 2007
  => nil

5.open3#popen3

复制代码 代码如下:

$ irb
  >> stdin, stdout, stderr = Open3.popen3('dc')
  => [#<IO:0x6e5474>, #<IO:0x6e5438>, #<IO:0x6e53d4>]
  >> stdin.puts(5)
  => nil
  >> stdin.puts(10)
  => nil
  >> stdin.puts("+")
  => nil
  >> stdin.puts("p")
  => nil
  >> stdout.gets
  => "15n"

6.Open4#popen4

复制代码 代码如下:

$ irb
  >> require "open4"
  => true
  >> pid, stdin, stdout, stderr = Open4::popen4 "false"
  => [26327, #<IO:0x6dff24>, #<IO:0x6dfee8>, #<IO:0x6dfe84>]
  >> $?
  => nil
  >> pid
  => 26327
  >> ignored, status = Process::waitpid2 pid
  => [26327, #<Process::Status: pid=26327,exited(1)>]
  >> status.to_i
  => 256

相关文章

  • Ruby中使用设计模式中的简单工厂模式和工厂方法模式

    Ruby中使用设计模式中的简单工厂模式和工厂方法模式

    这篇文章主要介绍了Ruby中使用设计模式中的简单工厂模式和工厂方法模式的示例,这两种模式经常被用于Ruby on Rails开发的结构设计中,需要的朋友可以参考下
    2016-03-03
  • Ruby中区分运行来源的方法

    Ruby中区分运行来源的方法

    这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if __name__ == '__main__':效果,其实Ruby中也有类似语法,需要的朋友可以参考下
    2015-01-01
  • Ruby 多线程的潜力和弱点分析

    Ruby 多线程的潜力和弱点分析

    这篇文章主要介绍了Ruby 多线程的潜力和弱点分析,本文讲解了Ruby 多线程和 IO Block、Ruby GIL 的影响、JRuby 去除了 GIL、Ruby 多线程总结等内容,需要的朋友可以参考下
    2015-03-03
  • 在Docker中自动化部署Ruby on Rails的教程

    在Docker中自动化部署Ruby on Rails的教程

    这篇文章主要介绍了在Docker中部署Ruby on Rails的教程,Docker是当下最火的虚拟机,而本文所介绍的Ruby on Rails的部署则充分利用了Ruby中的rake这一炫酷的实现自动化的方法,需要的朋友可以参考下
    2015-06-06
  • Jekyll静态网站后台引擎使用教程

    Jekyll静态网站后台引擎使用教程

    今天,我就来示范如何在github上搭建Blog,你可以从中掌握github的Pages功能,以及Jekyll软件的基本用法。更重要的是,你会体会到一种建立网站的全新思路。
    2016-04-04
  • Ruby 取得指定月日期数的方法

    Ruby 取得指定月日期数的方法

    取得指定月日期数的Ruby代码
    2009-05-05
  • 解读Ruby中注释的使用方法

    解读Ruby中注释的使用方法

    这篇文章主要介绍了解读Ruby中注释的使用方法,注释的用法是每门编程语言中最基本的知识点之一,需要的朋友可以参考下
    2015-05-05
  • 深入理解Ruby on Rails中的缓存机制

    深入理解Ruby on Rails中的缓存机制

    这篇文章主要介绍了深入理解Ruby on Rails中的缓存机制,本文来自于IBM官方网站技术文档,需要的朋友可以参考下
    2015-04-04
  • RUBY 新手教程 跟我一起学ruby

    RUBY 新手教程 跟我一起学ruby

    从今天起我就要开始学Ruby了。怎么样,没见吧?一个新人写教程。就凭我坚强的毅力,科学的自学方法,以及我的钻研精神,我有信心学通Ruby,而同样是新手的你也可以!
    2011-01-01
  • 简单的Ruby中的Socket编程教程

    简单的Ruby中的Socket编程教程

    这篇文章主要介绍了简单的Ruby中的Socket编程教程,是为Ruby on Rails学习过程当中的基础知识,需要的朋友可以参考下
    2015-04-04

最新评论