`
yanzilee9292
  • 浏览: 529395 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

六种用ruby调用执行shell命令的方法

    博客分类:
  • ruby
 
阅读更多


原文来自: http://blackanger.blog.51cto.com/140924/43730



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


1.Exec方法

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

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

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

 


2.System方法

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

  >> 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中调用执行shell命令的6种方法

    碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法: 1.Exec方法: Kernel#exec方法通过调用指定的命令取代当前进程例子: 代码如下:  $ irb  &gt;&gt; exec ‘echo “hello $HOSTNAME”‘  ...

    Ruby中执行Linux shell命令的六种方法详解

    在Ruby中,执行shell命令是一件不奇怪的事情,Ruby提供了大概6种方法供开发者进行实现。这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令。 exec exec会将指定的命令替换掉当前进程中的操作,...

    Ruby中case表达式详解

    Ruby的case表达式有两种形式: 第一种形式接近于一组连续的if语句:它让你列出一组条件,并执行第... 您可能感兴趣的文章:Ruby面向对象编程详解Ruby中调用执行shell命令的6种方法优化Ruby代码使程序运行速度提高的例子

    rye:从Ruby安全并行访问Unix shell

    守望者- V0.9 同时在多台机器上(从Ruby)安全地运行SSH命令。 受到启发,并与Ruby 1.8、1.9和JRuby 1.3+兼容! ... 通过调用Rye :: Box对象上的方法来执行Shell命令。 rbox = Rye :: Box . ne

    build_execution:强制执行显式错误处理且从不调用Shell的执行原语

    强制执行显式错误处理且从不调用Shell的执行原语。 如何使用 该接口类似于Open3.capture2e。 我们在运行命令之前将命令打印到stdout(除非:quiet=&gt; true )。 默认情况下,命令进程共享调用进程的标准输出,但是可以...

    Pragmatic - From Java to Ruby jun 2006

    再说,即便是操作系统,最简单的指令多个执行,最终是不是还不如自己积累最严谨的语言,写好并调试好一段Shell来执行更保险呢? 而脚本语言始终还是有一些做不到的地方,工业级的应用,经历了那么多年的洗练。 远程...

    command-builder:通过简单而优雅的方式构建可从Shell运行的命令。 还允许使用EventMachine同步执行或异步执行

    命令生成器command-builder通过简单而优雅的方式从shell生成可运行的命令。 还允许使用同步执行或异步执行。 这是调用jpegoptim的真实示例: require "command-builder"cmd = CommandBuilder :: new ( :jpegoptim )...

    JSP API接口和返回的版本

    另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...

    wasmer-ruby::gem_stone::spider_web:Ruby的WebAssembly运行时

    要安装wasmer Ruby gem,只需在您的shell中运行以下命令: $ gem install wasmer 。 例 在examples/simple.rs有一个玩具程序,用Rust(或编译成WebAssembly的任何其他语言)编写: #[no_mangle] pub extern fn ...

    rexe:可配置的Ruby命令行过滤器,格式转换器和执行器

    可执行文件 Rexe是Ruby脚本和gem,它通过以下方式将Ruby在命令行中的有用性和简洁性倍增: ... 不幸的是,当要调用多个OS命令时,Ruby也可能很笨拙。 有时,一个好的解决方案是在同一命令行上结合

    ruby开发的交互式程序例子

    1.能够调用定义的方法,如help 2.能够执行系统命令 3.能够类似irb/pry进行ruby语言解析 安装: gem install ripl gem install ripl-shell_commands 示例 ripl这个gem,它也提供很多插件,如下是一个简单的终端下...

    chruby:更改当前的Ruby

    调用hash -r清除命令查找哈希表。 Ruby名称的模糊匹配。 默认为系统Ruby。 (可选)支持自动切换和.ruby-version文件。 支持和 。 小(〜100 LOC)。 有测试。反特征不钩cd 。 不要安装可执行垫片,也不需要在安装...

    Vebugger:交互式 shell 调试器的前端

    Vebugger 目前支持: 在源代码中跟踪当前执行的命令调试器流程命令 - 步入、设置、设置和继续断点管理评估当前执行范围内的表达式弄乱程序的状态(改变值,调用函数) Vebugger 构建为用于为交互式 shell 调试器...

    JS JSP ASP .NET J2AM API接口和返回的版本

    另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...

    ASP API接口和返回的版本

    另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...

    PHP API接口和返回的版本

    另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...

    .NET API接口和返回的版本

    另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...

    JS API接口和返回的版本

    另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...

    2AM API接口和返回的版本

    另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 bat 文件(Windows 下使用),或者直接提供编译好的二进制库文件。 不过为了让读者能够更清楚如何安装,我们还是对每种语言的安装都...

    pianodora:Go 管理 Pianobar 的项目

    Pianobar 允许在事件发生时执行 shell 命令,例如更改歌曲、喜欢歌曲、禁止歌曲或更改电台。 我们的用例是 Raspberry Pi,之前我们有一个 Ruby 脚本发布 Hipchat 通知。 在 Ruby VM 启动、脚本发出 HTTP 请求然后...

Global site tag (gtag.js) - Google Analytics