`
clark1231
  • 浏览: 255477 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

    博客分类:
  • ruby
阅读更多

 


原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blackanger.blog.51cto.com/140924/43730
碰到需要调用操作系统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中调用执行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会将指定的命令替换掉当前进程中的操作,...

    用于检查应用程序健康状况的简单Rack中间件 -Ruby-Shell-下载

    总的来说,这个Rack中间件是用Ruby编写的一个工具,用于监控和报告应用程序的健康状况,它可能结合了Shell命令执行和内部状态检查,为运维人员提供了一种快速评估系统运行状态的方式。如果你在运行基于Rack的应用...

    shell+ruby.zip

    首先,`RedisStatusExporteryh.rb`可能是用Ruby编写的脚本,它的主要任务是连接到Redis服务器,执行Keyspace扫描(可能使用`KEYS`或`SCAN`命令,考虑到性能问题,更倾向于使用非阻塞的`SCAN`),筛选出匹配前缀的Key...

    Ruby-wisepdf使用shell工具wkhtmltopdf将HTML转成PDF文件输出给用户

    wisepdf将Ruby代码与这个命令行工具结合,提供了一个简洁的API来调用转换过程。 2. **安装** 要在项目中使用wisepdf,首先确保你的系统上已经安装了wkhtmltopdf。可以在其官方网站上找到对应操作系统的安装指南。...

    远程调用linux命令的demo

    10. **sudo和su命令**:在远程执行命令时,可能需要提升权限,sudo用于以其他用户身份运行命令,su则用于切换用户。 11. **日志记录和错误处理**:在远程调用命令时,正确记录日志和处理异常非常重要,这有助于排查...

    Alexa网络信息服务_Ruby_Shell_下载.zip

    2. **Shell脚本**:在Ruby中,可以使用`sh`或者`system`等方法来执行Shell命令,这使得Ruby成为编写系统管理脚本的有效工具。 3. **Alexa API**:如果项目是围绕Alexa网络信息服务,那么开发者可能使用了Alexa的API...

    Ruby-Cocaine用于在Ruby代码中执行命令行的库

    3. **环境变量管理**:可以通过库提供的方法设置环境变量,影响命令的执行环境。 4. **输出和错误处理**:Cocaine可以捕获命令的输出和错误,这在需要处理命令返回结果或检查错误时非常有用。 5. **超时控制**:...

    Hello, Ruby World!

    - **无需编译**:Ruby是一种解释型语言,这意味着它的程序可以在编写后直接运行,而无需预先编译成机器代码。 - **即时结果**:这种特性使得开发者能够快速测试和验证代码逻辑,极大地提高了开发效率。 ##### 2. ...

    Ruby-irbtools改善Ruby的IRB控制台

    Ruby IRB(Interactive Ruby)是Ruby语言的标准交互式shell,允许开发者在运行时测试代码、探索类库和调试程序。然而,IRB本身的功能相对基础,对于一些高级的开发需求可能显得不够用。这就是irbtools的出现,它为...

    Ruby程序设计.doc

    在Ruby中,可以使用反引号(``` `` ```)来进行命令替换,即执行shell命令并获取其输出结果。 **6.3 赋值运算符** 赋值运算符用于将值赋给变量。 **6.4 并行赋值** Ruby支持并行赋值,即在一个赋值语句中同时给多...

    ruby初学者教程(对初学者很有帮助)

    可以在命令行中执行shell命令并获取其输出。 ```ruby output = `ls` ``` **6.3 赋值运算符** 用于将值赋给变量。 ```ruby x = 10 ``` **6.4 并行赋值** 可以同时为多个变量赋值。 ```ruby a, b = 1, 2 ``` *...

    SignalFx的Ruby客户端库_Ruby_Shell_下载.zip

    6. **关闭客户端**:在程序结束时,调用`stop`方法关闭客户端,释放资源。 ```ruby client.stop ``` **应用场景:** - **微服务监控**:在分布式系统中,每个服务可以使用此客户端发送其特有的指标和事件。 - **...

    Ruby中case表达式详解

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

    ruby programming

    - **元编程能力**:Ruby允许在运行时定义方法和修改代码结构。 - **可扩展性**:Ruby可以通过C语言编写扩展模块来增强功能。 - **强大的标准库**:Ruby拥有一个强大的标准库,支持多种编程任务。 #### 参考资料 - ...

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

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

    浅谈在WEBSHELL下如何运行命令.pdf

    0×01 ASP环境下运行命令的方法: 在ASP中运行命令,通常需要检查服务器上是否支持所需组件,如WScript.Shell和WScript.Network。如果这些组件被禁用,可以通过创建ActiveXObject来尝试绕过限制。示例代码展示了如何...

    essential_ruby

    在IRB环境中可以执行Ruby代码并立即看到结果,这对于调试和学习非常有帮助。 ### Ruby Gems Gems是Ruby中的包管理系统,类似于Python的pip或Node.js的npm。它可以用来安装、更新或卸载Ruby库。例如,安装一个名为`...

    第六十八课:基于Ruby内存加载shellcode第一季.docx

    根据提供的文档信息,本文将详细解释“第六十八课:基于Ruby内存加载shellcode第一季”中的关键知识点。主要内容包括理解shellcode的概念、如何利用Ruby语言生成shellcode以及如何在内存中加载并执行shellcode。 ##...

Global site tag (gtag.js) - Google Analytics