碰到需要調(diào)用操作系統(tǒng)shell命令的時候,Ruby為我們提供了六種完成任務的方法:
1.Exec方法:
Kernel#exec方法通過調(diào)用指定的命令取代當前進程例子:
復制代碼 代碼如下:
$ irb
>> exec 'echo "hello $HOSTNAME"'
hello nate.local
$
值得注意的是,exec方法用echo命令來取代了irb進程從而退出了irb。主要的缺點是,你無法從你的ruby腳本里知道這個命令是成功還是失敗。
2.System方法
Kernel#system方法操作命令同上, 但是它是運行一個子shell來避免覆蓋當前進程。如果命令執(zhí)行成功則返回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中case表達式詳解
- Ruby面向?qū)ο缶幊淘斀?/li>
- 優(yōu)化Ruby代碼使程序運行速度提高的例子