碰到需要调用操作系统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
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
循序渐进掌握递归正则表达式
一般来说,递归的正则表达式用来匹配任意嵌套层次的结构或左右对称的结构。例如匹配: 递归正则在正则表达式里算是比较灵活的部分,换句话说就是可能会比较难...
[阅读全文]
-
scrapy 使用
启动方式: 写一个启动文件,与配置文件同级 from scrapy.cmdline import execute import sys,os sys...
[阅读全文]
-
-
-
经典例题
例题: 1.用户输入账号 2.用户输入密码 3.判断用户的账号是不是alex 4.如果账号是alex在继续判断密码是不是alexdsb 5.账号和密...
[阅读全文]
-
-
-
-
-
网友评论