Ruby中調(diào)用執(zhí)行shell命令的6種方法
碰到需要調(diào)用操作系統(tǒng)shell命令的時(shí)候,Ruby為我們提供了六種完成任務(wù)的方法:
1.Exec方法:
Kernel#exec方法通過(guò)調(diào)用指定的命令取代當(dāng)前進(jìn)程例子:
$ irb
>> exec 'echo "hello $HOSTNAME"'
hello nate.local
$
值得注意的是,exec方法用echo命令來(lái)取代了irb進(jìn)程從而退出了irb。主要的缺點(diǎn)是,你無(wú)法從你的ruby腳本里知道這個(gè)命令是成功還是失敗。
2.System方法
Kernel#system方法操作命令同上, 但是它是運(yùn)行一個(gè)子shell來(lái)避免覆蓋當(dāng)前進(jìn)程。如果命令執(zhí)行成功則返回true,否則返回false。
$ irb
>> system 'echo "hello $HOSTNAME"'
hello nate.local
=> true
>> system 'false'
=> false
>> puts $?
256
=> nil
>>
3.反引號(hào)(Backticks,Esc鍵下面那個(gè)鍵)
$ irb
>> today = `date`
=> "Mon Mar 12 18:15:35 PDT 2007n"
>> $?
=> #<Process::Status: pid=25827,exited(0)>
>> $?.to_i
=> 0
這種方法是最普遍的用法了。它也是運(yùn)行在一個(gè)子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
相關(guān)文章
使用Ruby來(lái)編寫(xiě)訪問(wèn)Twitter的命令行應(yīng)用程序的教程
這篇文章主要介紹了使用Ruby來(lái)編寫(xiě)訪問(wèn)Twitter的命令行應(yīng)用程序的教程,文章來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04冒泡排序算法及Ruby版的簡(jiǎn)單實(shí)現(xiàn)
冒泡排序?yàn)樽罨镜呐判蛩惴ㄖ?其時(shí)間復(fù)雜度為O(n^2),這里我們就來(lái)簡(jiǎn)單看一下冒泡排序算法及Ruby版的簡(jiǎn)單實(shí)現(xiàn),首先還是先來(lái)了解算法原理:2016-05-05Ruby中使用設(shè)計(jì)模式中的簡(jiǎn)單工廠模式和工廠方法模式
這篇文章主要介紹了Ruby中使用設(shè)計(jì)模式中的簡(jiǎn)單工廠模式和工廠方法模式的示例,這兩種模式經(jīng)常被用于Ruby on Rails開(kāi)發(fā)的結(jié)構(gòu)設(shè)計(jì)中,需要的朋友可以參考下2016-03-03在Docker中自動(dòng)化部署Ruby on Rails的教程
這篇文章主要介紹了在Docker中部署Ruby on Rails的教程,Docker是當(dāng)下最火的虛擬機(jī),而本文所介紹的Ruby on Rails的部署則充分利用了Ruby中的rake這一炫酷的實(shí)現(xiàn)自動(dòng)化的方法,需要的朋友可以參考下2015-06-06