免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2283 | 回复: 3
打印 上一主题 下一主题

六种用ruby调用执行shell命令的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-12 11:23 |只看该作者 |倒序浏览
六种用ruby调用执行shell命令的方法



原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blackanger.blog.51cto.com/140924/43730
碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法:
1.Exec方法:
    Kernel#exec方法通过调用指定的命令取代当前进程:
  例子:
  1.    $ irb
  2.       >> exec 'echo "hello $HOSTNAME"'
  3.          hello nate.local
  4.       $
复制代码
值得注意的是,exec方法用echo命令来取代了irb进程从而退出了irb。主要的缺点是,你无法从你的ruby脚本里知道这个命令是成功还是失败。

2.System方法。
  Kernel#system方法操作命令同上, 但是它是运行一个子shell来避免覆盖当前进程。如果命令执行成功则返回true,否则返回false。
  1. $ irb            
  2.   >> system 'echo "hello $HOSTNAME"'
  3.   hello nate.local
  4.   => true
  5.   >> system 'false'
  6.   => false
  7.   >> puts $?
  8.   256
  9.   => nil
  10.   >>
复制代码
3.反引号(Backticks,Esc键下面那个键)
  1. $ irb
  2.   >> today = `date`
  3.   => "Mon Mar 12 18:15:35 PDT 2007n"
  4.   >> $?
  5.   => #<Process::Status: pid=25827,exited(0)>
  6.   >> $?.to_i
  7.   => 0
复制代码
这种方法是最普遍的用法了。它也是运行在一个子shell中。
4.IO#popen
  1. $ irb
  2.   >> IO.popen("date") { |f| puts f.gets }
  3.   Mon Mar 12 18:58:56 PDT 2007
  4.   => nil
复制代码
5.open3#popen3
  1. $ irb
  2.   >> stdin, stdout, stderr = Open3.popen3('dc')
  3.   => [#<IO:0x6e5474>, #<IO:0x6e5438>, #<IO:0x6e53d4>]
  4.   >> stdin.puts(5)
  5.   => nil
  6.   >> stdin.puts(10)
  7.   => nil
  8.   >> stdin.puts("+")
  9.   => nil
  10.   >> stdin.puts("p")
  11.   => nil
  12.   >> stdout.gets
  13.   => "15n"
复制代码
6.Open4#popen4
  1. $ irb
  2.   >> require "open4"
  3.   => true
  4.   >> pid, stdin, stdout, stderr = Open4::popen4 "false"
  5.   => [26327, #<IO:0x6dff24>, #<IO:0x6dfee8>, #<IO:0x6dfe84>]
  6.   >> $?
  7.   => nil
  8.   >> pid
  9.   => 26327
  10.   >> ignored, status = Process::waitpid2 pid
  11.   => [26327, #<Process::Status: pid=26327,exited(1)>]
  12.   >> status.to_i
  13.   => 256
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-01-12 11:23 |只看该作者
谢谢分享

论坛徽章:
0
3 [报告]
发表于 2012-01-12 12:21 |只看该作者
村艹一发就是给力帖子。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
4 [报告]
发表于 2012-01-12 19:58 |只看该作者
这个,很强!
学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP