最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang執(zhí)行命令獲取執(zhí)行結(jié)果狀態(tài)(推薦)

 更新時(shí)間:2019年11月20日 09:43:50   作者:jacpy  
這篇文章主要介紹了golang執(zhí)行命令獲取執(zhí)行結(jié)果狀態(tài)的相關(guān)知識,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

這幾天在用golang寫一個(gè)工具,要執(zhí)行外部命令工具,而且還要將外部命令工具輸出的日志也要輸出出來。網(wǎng)上找了一下,資料很多,關(guān)鍵是執(zhí)行的結(jié)果成功或失敗狀態(tài)沒找到好的方法獲取到。

剛開始想的是看錯誤日志,如果有錯誤日志,那么就是執(zhí)行失敗。測試的時(shí)候發(fā)現(xiàn)這樣不行,發(fā)現(xiàn)有些時(shí)候會用error輸出日志,但不一定就是執(zhí)行失敗。后來想用日志中的關(guān)鍵字匹配,因?yàn)橛行┟顖?zhí)行成功或失敗都是有關(guān)鍵字輸出的,測試發(fā)現(xiàn)也不太好。

最后沒辦法,看了一下Cmd.Wait()方法的實(shí)現(xiàn),突然眼前一亮,找到方法了,有一個(gè)Cmd.ProcessState結(jié)構(gòu)體可以使用。于是整理了一下,貼一下代碼實(shí)現(xiàn):

func Exec(name string, args ...string) error {
 cmd := exec.Command(name, args...)
 stderr, _ := cmd.StderrPipe()
 stdout, _ := cmd.StdoutPipe()
 if err := cmd.Start(); err != nil {
 log.Println("exec the cmd ", name, " failed")
 return err
 }
 // 正常日志
 logScan := bufio.NewScanner(stdout)
 go func() {
 for logScan.Scan() {
  log.Println(logScan.Text())
 }
 }()
 // 錯誤日志
 errBuf := bytes.NewBufferString("")
 scan := bufio.NewScanner(stderr)
 for scan.Scan() {
 s := scan.Text()
 log.Println("build error: ", s)
 errBuf.WriteString(s)
 errBuf.WriteString("\n")
 }
 // 等待命令執(zhí)行完
 cmd.Wait()
 if !cmd.ProcessState.Success() {
 // 執(zhí)行失敗,返回錯誤信息
 return errors.New(errBuf.String())
 }
 return nil
}

注意:上面代碼中沒有處理輸入的情況,如果待執(zhí)行的命令需要輸入數(shù)據(jù),則不適用。

總結(jié)

以上所述是小編給大家介紹的golang執(zhí)行命令獲取執(zhí)行結(jié)果狀態(tài),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • go語言fasthttp使用實(shí)例小結(jié)

    go語言fasthttp使用實(shí)例小結(jié)

    fasthttp?是一個(gè)使用?Go?語言開發(fā)的?HTTP?包,主打高性能,針對?HTTP?請求響應(yīng)流程中的?hot?path?代碼進(jìn)行了優(yōu)化,下面我們就來介紹go語言fasthttp使用實(shí)例小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Golang易錯知識點(diǎn)匯總

    Golang易錯知識點(diǎn)匯總

    這篇文章匯總了在開發(fā)和刷面試題過程中遇到的Golang容易搞錯的知識點(diǎn),關(guān)鍵部分也都為大家寫了代碼示例,感興趣的小伙伴可以了解一下
    2022-09-09
  • golang中兩個(gè)協(xié)程交替打印數(shù)字和字母的實(shí)現(xiàn)

    golang中兩個(gè)協(xié)程交替打印數(shù)字和字母的實(shí)現(xiàn)

    這篇文章給大家介紹了golang中兩個(gè)協(xié)程交替打印數(shù)字和字母的實(shí)現(xiàn),文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Go語言中strings和strconv包示例代碼詳解

    Go語言中strings和strconv包示例代碼詳解

    這篇文章主要介紹了Go語言中strings和strconv包示例代碼詳解 ,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • GO語言基本數(shù)據(jù)類型總結(jié)

    GO語言基本數(shù)據(jù)類型總結(jié)

    這篇文章主要介紹了GO語言基本數(shù)據(jù)類型,較為詳細(xì)的總結(jié)了GO語言的基本數(shù)據(jù)類型,對于GO語言的學(xué)習(xí)有一定的借鑒參考價(jià)值,需要的朋友可以參考下
    2014-12-12
  • Golang指針的操作以及常用的指針函數(shù)

    Golang指針的操作以及常用的指針函數(shù)

    本文主要介紹了Golang指針的操作以及常用的指針函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Go 語言的指針的學(xué)習(xí)筆記

    Go 語言的指針的學(xué)習(xí)筆記

    這篇文章主要介紹了Go 語言的指針的學(xué)習(xí)筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • Go語言中關(guān)于set的實(shí)現(xiàn)思考分析

    Go語言中關(guān)于set的實(shí)現(xiàn)思考分析

    Go?開發(fā)過程中有時(shí)我們需要集合(set)這種容器,但?Go?本身未內(nèi)置這種數(shù)據(jù)容器,故常常我們需要自己實(shí)現(xiàn),下面我們就來看看具體有哪些實(shí)現(xiàn)方法吧
    2024-01-01
  • Golang中實(shí)現(xiàn)簡單的Http Middleware

    Golang中實(shí)現(xiàn)簡單的Http Middleware

    本文主要針對Golang的內(nèi)置庫 net/http 做了簡單的擴(kuò)展,實(shí)現(xiàn)簡單的Http Middleware,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Go語言pointer及switch?fallthrough實(shí)戰(zhàn)詳解

    Go語言pointer及switch?fallthrough實(shí)戰(zhàn)詳解

    這篇文章主要為大家介紹了Go語言pointer及switch?fallthrough實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評論

奉贤区| 修水县| 黄龙县| 元阳县| 婺源县| 积石山| 获嘉县| 张家口市| 宽城| 青阳县| 武威市| 鄂托克前旗| 漾濞| 东海县| 来宾市| 鄯善县| 紫云| 云林县| 买车| 周宁县| 新蔡县| 黄龙县| 云安县| 万宁市| 长宁县| 宜城市| 广水市| 泸州市| 新丰县| 康定县| 凭祥市| 拜泉县| 教育| 乌恰县| 阳春市| 新巴尔虎左旗| 许昌市| 安新县| 陇南市| 溆浦县| 阳城县|