六種用ruby呼叫執行shell命令的方法

2021-06-22 23:30:43 字數 1578 閱讀 5976

原始出處 、作者資訊和本宣告。否則將追究法律責任。

碰到需要呼叫作業系統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" 

>> $?

=> #

>> $?.to_i

=> 0

這種方法是最普遍的用法了。它也是執行在乙個子shell中。

4.io#popen

$ irb

>> io.popen("date")

mon mar 12 18:58:56 pdt 2007

=> nil

5.open3#popen3

$ irb

>> stdin, stdout, stderr = open3.popen3('dc') 

=> [#, #, #]

>> 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, #, #, #]

>> $?

=> nil

>> pid

=> 26327

>> ignored, status = process::waitpid2 pid

=> [26327, #]

>> status.to_i

=> 256

本文出自 「悟道集」 部落格,請務必保留此出處

用ruby呼叫執行shell命令

碰到需要呼叫作業系統shell命令的時候,ruby為我們提供了六種完成任務的方法 1.exec方法 kernel exec方法通過呼叫指定的命令取代當前程序 例子 irb exec echo hello hostname hello nate.local 值得注意的是,exec方法用echo命令來取...

php呼叫遠端url的六種方法

示例 1 用file get contents 以get方式獲取內容 示例 2 用fopen開啟url,以get方式獲取內容 fp fopen url,r printarr stream get meta da ta fp printhr while feof fp echo url body re...

php 呼叫遠端url的六種方法小結

詳細出處參考 http www.jb51.net article 20705.htm 示例 1 用file get contents 以get方式獲取內容 示例 2 用fopen開啟url,以get方式獲取內容 fp fopen url,r printarr stream get meta data...