六種用ruby呼叫執行shell命令的方法
碰到需要呼叫作業系統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
©著作權歸作者所有:來自51CTO部落格作者blackanger的原創作品,如需轉載,請註明出處,否則將追究法律責任
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3209/viewspace-2820417/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在 Ruby 中執行 Shell 命令的 6 種方法
- shell中呼叫shell的三種方式&並行shell並行
- Java執行shell、cmd命令Java
- shell 下執行mysql 命令MySql
- Linux中執行Shell指令碼的方式(三種方法)Linux指令碼
- python執行linux命令的兩種方法PythonLinux
- 執行Shell指令碼的4種方法及區別詳解指令碼
- 【Mongo】shell命令列模式執行mongo命令Go命令列模式
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- python中執行命令的3種方法小結Python
- 使用CRONTAB呼叫shell指令碼執行EXP指令碼
- Python呼叫shell命令Python
- python裡執行shell命令或cmd命令Python
- awk小技巧之執行shell命令
- 在shell中執行SQL*Plus命令SQL
- linux init六種執行模式Linux模式
- python執行系統命令四種方法比較Python
- Python中執行系統命令常見的幾種方法Python
- Ruby如何實現動態方法呼叫
- Ruby執行緒池執行緒
- Python-呼叫執行系統命令Python
- Golang 使用執行命令帶管道符執行的方法Golang
- QTP呼叫外部應用程式的4種方法QT
- tweak 中常用的方法呼叫方法和 執行時APIAPI
- shell指令碼linux命令連續執行指令碼Linux
- 實驗-shell執行資料庫命令.TXT資料庫
- 呼叫JavaCalls::call()方法來執行Java方法Java
- crontab異常:shell下可以執行命令,執行crontab卻報錯
- [譯] Ruby 2.6 String的split 方法支援程式碼塊執行
- bash shell指令碼執行方法總結指令碼
- java中常見的六種執行緒池詳解Java執行緒
- R1-012 Shell執行命令的順序
- AIX命令集錦六(自動執行作業命令)AI
- shell指令碼命令 執行python檔案&python命令列執行python程式碼指令碼Python命令列
- 在本地執行 LLMs 的 6 種方法
- C++/Php/Python語言執行shell命令C++PHPPython
- 執行計劃幾種方法