婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Ruby中執行Linux shell命令的六種方法詳解

Ruby中執行Linux shell命令的六種方法詳解

熱門標簽:柯城手機地圖如何做地圖標注 天津外呼系統怎么收費 淮安自動外呼系統供應商 征服者企業地圖標注 巫師3地圖標注魔力之所 漯河電銷 中牟外呼系統違法嗎 AI電銷機器人 線路 外呼線路從哪里出來的

在Ruby中,執行shell命令是一件不奇怪的事情,Ruby提供了大概6種方法供開發者進行實現。這些方法都很簡單,本文將具體介紹一下如何在Ruby腳本中進行調用終端命令。

exec

exec會將指定的命令替換掉當前進程中的操作,指定命令結束后,進程結束。

復制代碼 代碼如下:

exec 'echo "hello world"'
print 'abc'

執行上述的命令,結果如下,我們可以看到沒有abc的輸出,可以看出來,在執行echo "hello world"命令后進程就結束了。不會繼續執行后面的print 'abc'。

復制代碼 代碼如下:

ruby testCommand.rb
hello world

使用exec一個頭疼的事情就是沒有辦法知道shell命令執行成功還是失敗。

system

system和exec相似,但是system執行的命令不會是在當前進程,而是在一個新創建的進程。system會返回布爾值來表明命令執行結果是成功還是失敗。

復制代碼 代碼如下:

$ irb
> system 'echo "hello $HOSTNAME"'
hello androidyue
 => true
> puts $?
pid 11845 exit 0
 => nil
> system 'false'
 => false
> puts $?
pid 11858 exit 1
 => nil
>>

system會將進程的退出的狀態碼賦值給$?,如果程序正常退出,$?的值為0,否則為非0。通過檢測退出的狀態碼我們可以在ruby腳本中拋出異常或者進行重試操作。

注:在Unix-like系統中進程的退出狀態碼以0和非0表示,0代表成功,非0代表失敗。

system可以告訴我們命令執行是成功還是失敗,但是有些時候我們需要得到執行命令的輸出,并在腳本中使用。顯然system無法直接滿足,需要我們使用反引號來實現。

反引號(`)

使用反引號是shell中常用的獲取命令輸出內容的方法,在ruby中也是可以,而且一點都需要做改變。使用反引號執行命令也會將命令在另一個進程中執行。

復制代碼 代碼如下:

1.9.3p448 :013 > today = `date`
 => "Sat Nov 15 19:28:55 CST 2014\n"
1.9.3p448 :014 > $?
 => #Process::Status: pid 11925 exit 0>
1.9.3p448 :015 > $?.to_i
 => 0
1.9.3p448 :016 >

上面的方法如此簡單,我們可以直接對返回的字符串結果進行操作。

注意,$?已經不再是上述的那樣單純的退出狀態碼了,它實際上是一個Process::Status對象。我們從中不僅可以知道進程的退出狀態碼也可以知道進程的ID。使用$?.to_i會得到退出的狀態碼,使用$?.to_s會得到包含了進程id,退出狀態碼等信息的字符串。

使用反引號的一個結果就是我們只能得到標準的輸出(stdout)而不能得到標準的錯誤信息(stderr),比如下面的例子,我們執行一個輸出錯誤字符串的perl腳本。

復制代碼 代碼如下:

 $ irb
  >> warning = `perl -e "warn 'dust in the wind'"`
  dust in the wind at -e line 1.
  => ""
  >> puts warning

  => nil

可以看出,warning并沒有得到出錯的信息,這就表明反引號無法得到標準錯誤的信息。

IO#popen

IO#popen也是一種執行命令的方法,其命令也是在另外的進程中執行。使用popen你可以像操作IO對象一樣處理標準輸入和輸出。

復制代碼 代碼如下:

$ irb
>> IO.popen("date") { |f| puts f.gets }
Mon Mar 12 18:58:56 PDT 2007
=> nil

Open3#popen3

在標準的Ruby庫中還提供了一個Open3。使用這個類我們可以很容易的對標準輸入,輸出,錯誤進行處理。這里我們使用一個可以交互的工具dc。dc是一種逆波蘭表達式(又叫做后綴表達式,每一運算符都置于其運算對象之后)的計算器,支持從標準輸入讀取數學表達式。在這個例子中,我們將兩個數值和一個操作符進行壓棧處理。然后使用p來輸出結果。比如我們輸入5和10,然后輸入+,然后會得到15\n的輸出。

復制代碼 代碼如下:

$ 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
  => "15\n"

使用這個方法,我們不僅可以讀取到命令的輸出還可以對命令進行輸入操作。這個方法對于進行交互操作很方便。通過popen3,我們還可以得到標準的錯誤信息。

復制代碼 代碼如下:

  # (irb continued...)
  >> stdin.puts("asdfasdfasdfasdf")
  => nil
  >> stderr.gets
  => "dc: stack empty\n"

但是,在ruby 1.8.5中popen3有一個缺陷,進程的退出狀態沒有寫入到$?中。

復制代碼 代碼如下:

$ irb
  >> require "open3"
  => true
  >> stdin, stdout, stderr = Open3.popen3('false')
  => [#IO:0x6f39c0>, #IO:0x6f3984>, #IO:0x6f3920>]
  >> $?
  => #Process::Status: pid=26285,exited(0)>
  >> $?.to_i
  => 0

為什么是0,false命令執行后的退出狀態應該是非0才對,由于這個缺陷,我們需要了解一下Open4

Open4#popen4

Open4#popen4使用起來和Open3#popen3差不多,而且我們也可以得到程序的退出狀態。popen4還可以返回一個子進程ID。你也可以通過Process::waitpid2 加上對應的進程ID獲得進程退出狀態。但是前提是要安裝open4的gem。

復制代碼 代碼如下:

$ 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

您可能感興趣的文章:
  • linux shell命令快捷獲得系統幫助(一)[man-pages定義規范]
  • linux shell命令行選項與參數用法詳解
  • linux shell腳本學習xargs命令使用詳解
  • Shell+Linux命令實現日志分析
  • linux中 shell 歷史命令記錄功能
  • Linux命令行和shell腳本編程寶典 Richard Blum
  • linux shell命令執行順序的控制方法
  • linux shell命令行參數用法詳解
  • Linux Shell腳本系列教程(二):終端打印命令詳解
  • Linux shell命令幫助格式詳解

標簽:河池 甘孜 南昌 克拉瑪依 大慶 棗莊 內江 西雙版納

巨人網絡通訊聲明:本文標題《Ruby中執行Linux shell命令的六種方法詳解》,本文關鍵詞  Ruby,中,執行,Linux,shell,命令,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby中執行Linux shell命令的六種方法詳解》相關的同類信息!
  • 本頁收集關于Ruby中執行Linux shell命令的六種方法詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩av一级电影| 欧美日韩精品系列| 亚洲女与黑人做爰| 国产亚洲精品中文字幕| 欧美日韩国产精品成人| www.欧美色图| 国产美女娇喘av呻吟久久| 亚洲mv大片欧洲mv大片精品| 久久蜜桃香蕉精品一区二区三区| 欧美特级限制片免费在线观看| 成人精品免费视频| 国产精品综合在线视频| 免费在线看成人av| 午夜亚洲福利老司机| 亚洲欧美一区二区久久| 亚洲国产精品v| 久久精品亚洲一区二区三区浴池| 五月天视频一区| 亚洲成av人在线观看| 亚洲综合图片区| 亚洲综合另类小说| 亚洲在线观看免费视频| 一区二区三区四区精品在线视频| 久久久亚洲高清| 国产欧美日韩另类视频免费观看| 精品国产成人系列| 精品国产一区二区三区不卡| 精品区一区二区| 2024国产精品| 久久噜噜亚洲综合| 国产精品高潮呻吟| 亚洲欧美日韩国产综合| 亚洲视频一二三区| 亚洲最新视频在线观看| 亚洲不卡av一区二区三区| 视频一区二区三区在线| 麻豆国产91在线播放| 精品在线一区二区| 成人在线一区二区三区| 色欧美乱欧美15图片| 欧美三电影在线| 精品少妇一区二区三区在线视频| 国产69精品久久99不卡| 91美女在线看| 91精品国产品国语在线不卡| 黄页视频在线91| bt7086福利一区国产| 欧美日韩一二区| 欧美精品一区二区蜜臀亚洲| 中文字幕在线观看一区二区| 亚洲综合偷拍欧美一区色| 麻豆高清免费国产一区| 成人教育av在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美日韩高清一区二区三区| 日韩美女在线视频| 亚洲精品视频自拍| 精品一区二区三区在线观看国产| 成人不卡免费av| 欧美精品精品一区| 国产精品久久久久精k8| 日日摸夜夜添夜夜添国产精品 | 欧美高清在线视频| 亚洲电影欧美电影有声小说| 国产美女视频一区| 欧美午夜一区二区三区免费大片| 精品国产乱码久久久久久久 | 国产精品网曝门| 奇米影视一区二区三区小说| 成人久久18免费网站麻豆| 欧美人伦禁忌dvd放荡欲情| 国产精品少妇自拍| 老汉av免费一区二区三区| 91丨porny丨中文| 日本一区二区三区国色天香| 国产一区欧美日韩| 国产日韩v精品一区二区| 欧洲精品在线观看| 亚洲成人av一区二区| 久久综合国产精品| 欧美在线观看视频在线| 奇米色777欧美一区二区| 中文字幕不卡在线观看| 日韩欧美一级二级三级| 国产精品一二一区| 亚洲视频一区在线观看| 91在线观看污| 一区二区三区 在线观看视频 | 国产一区二区三区四区在线观看| 欧美www视频| 国产精品久久毛片| 在线视频国产一区| 亚洲国产日产av| 午夜精品爽啪视频| 国产美女在线精品| 国产精品一区二区三区网站| 激情欧美一区二区| 欧美综合一区二区三区| 51精品秘密在线观看| 丝袜美腿亚洲一区二区图片| 国产99久久久久久免费看农村| 99热这里都是精品| 欧美变态tickle挠乳网站| 有坂深雪av一区二区精品| 激情五月婷婷综合| 亚洲色图都市小说| 国产精品一区一区| 日韩三级免费观看| 国产精品美女久久久久久2018| 久草在线在线精品观看| 欧美高清激情brazzers| 亚洲综合无码一区二区| 99v久久综合狠狠综合久久| 欧美色老头old∨ideo| 久久久久亚洲蜜桃| 国产综合色在线| 日韩午夜激情视频| 日本女人一区二区三区| 欧美揉bbbbb揉bbbbb| 亚洲六月丁香色婷婷综合久久| 成人视屏免费看| 91一区一区三区| 日本vs亚洲vs韩国一区三区二区| 欧美日韩一区高清| 日韩电影在线一区| 26uuu欧美日本| 国产一区二区伦理片| 在线观看91精品国产入口| 久久免费电影网| 成人午夜又粗又硬又大| 中文字幕在线一区| 在线中文字幕不卡| 亚洲欧洲精品天堂一级| 91福利社在线观看| 视频一区二区中文字幕| 欧美三片在线视频观看| 国产精品视频观看| 91免费观看视频| 日韩精品三区四区| 91精品国产综合久久国产大片| 日本中文字幕一区二区有限公司| 欧美美女视频在线观看| 日韩av一区二区三区四区| 色婷婷久久久综合中文字幕| 亚洲国产成人porn| 欧美一级高清片在线观看| 国产美女娇喘av呻吟久久| 欧美中文一区二区三区| 麻豆国产一区二区| 欧美丝袜自拍制服另类| 久久se这里有精品| 国产日韩在线不卡| 在线观看一区不卡| 中文一区二区完整视频在线观看 | 国产v综合v亚洲欧| 久久久久久久性| 99精品视频在线观看| 国产网站一区二区| 99久久久久久| 青青草国产成人99久久| 国产精品乱人伦中文| 久久先锋影音av| 欧美伊人久久久久久久久影院| 91亚洲国产成人精品一区二区三| 欧美一区二区三区在线观看视频 | 成人深夜视频在线观看| 狠狠色丁香婷婷综合| 亚洲综合视频在线| 亚洲一区二区免费视频| 国产日本欧美一区二区| 久久久国产午夜精品| 成人免费视频免费观看| 粉嫩aⅴ一区二区三区四区五区| 国产三区在线成人av| 欧美色成人综合| 97久久超碰国产精品电影| 精品亚洲成a人在线观看| 亚洲一区二区三区四区五区中文| 日本一区二区在线不卡| 日韩欧美成人一区| 99vv1com这只有精品| 欧美在线制服丝袜| 麻豆精品一区二区av白丝在线 | 色妞www精品视频| 色综合久久久久综合体| 国产精品一区二区三区乱码| 另类小说色综合网站| 亚洲v中文字幕| 亚洲综合另类小说| 亚洲精品欧美二区三区中文字幕| 久久天天做天天爱综合色| 制服丝袜亚洲精品中文字幕| 欧美一区二区久久| 国产精品99久久久久久似苏梦涵| 成人午夜激情片| 国产精品一卡二| 国产伦精一区二区三区| 亚洲成人福利片| 亚洲综合清纯丝袜自拍| 污片在线观看一区二区|