国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

利用Golang如何調用Linux命令詳解

2020-04-01 19:05:54
字體:
來源:轉載
供稿:網友

本文介紹的是Golang使用 os/exec 來執行 Linux 命令,分享出來供大家參考學習,下面來看看詳細的介紹:

下面是一個簡單的示例:

 package main  import (  "fmt"  "io/ioutil"  "os/exec" )  func main() {  cmd := exec.Command("/bin/bash", "-c", `df -lh`)   //創建獲取命令輸出管道  stdout, err := cmd.StdoutPipe()  if err != nil {   fmt.Printf("Error:can not obtain stdout pipe for command:%s/n", err)   return  }   //執行命令  if err := cmd.Start(); err != nil {   fmt.Println("Error:The command is err,", err)   return  }   //讀取所有輸出  bytes, err := ioutil.ReadAll(stdout)  if err != nil {   fmt.Println("ReadAll Stdout:", err.Error())   return  }   if err := cmd.Wait(); err != nil {   fmt.Println("wait:", err.Error())   return  }  fmt.Printf("stdout:/n/n %s", bytes) }

或者創建一個緩沖讀取器按行讀取:

 package main  import (  "bufio"  "fmt"  "os/exec" )  func main() {  cmd := exec.Command("/bin/bash", "-c", `df -lh`)   //創建獲取命令輸出管道  stdout, err := cmd.StdoutPipe()  if err != nil {   fmt.Printf("Error:can not obtain stdout pipe for command:%s/n", err)   return  }   //執行命令  if err := cmd.Start(); err != nil {   fmt.Println("Error:The command is err,", err)   return  }   //使用帶緩沖的讀取器  outputBuf := bufio.NewReader(stdout)   for {    //一次獲取一行,_ 獲取當前行是否被讀完   output, _, err := outputBuf.ReadLine()   if err != nil {     // 判斷是否到文件的結尾了否則出錯    if err.Error() != "EOF" {     fmt.Printf("Error :%s/n", err)    }    return   }   fmt.Printf("%s/n", string(output))  }   //wait 方法會一直阻塞到其所屬的命令完全運行結束為止  if err := cmd.Wait(); err != nil {   fmt.Println("wait:", err.Error())   return  } }

輸出結果:

golang,執行linux命令,linux命令,調用命令

在寫這句 if err.Error() != "EOF" 時,一直以為可以直接將 error 類型直接轉為 string 然后就可以比較了,所以剛開始寫的代碼是這樣的 if string(err) != "EOF" ,但是一直報下面這個錯誤:

 # command-line-arguments ./exec_command.go:36: cannot convert err (type error) to type string

于是查了下才明白,error 類型本身是一個預定義好的接口,里面定義了一個method:

 type error interface {  Error() string }

所以 err.Error() 才是一個 string 類型的返回值。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌审旗| 余干县| 夏河县| 佛坪县| 大英县| 泰和县| 谢通门县| 上犹县| 尖扎县| 咸阳市| 昌吉市| 西乌珠穆沁旗| 凤台县| 常德市| 桂阳县| 杭锦旗| 兴宁市| 青岛市| 丁青县| 东山县| 沧源| 长汀县| 屏南县| 青海省| 达拉特旗| 淳化县| 万源市| 江北区| 开原市| 罗城| 子洲县| 富顺县| 天全县| 龙胜| 兖州市| 葫芦岛市| 万载县| 伊宁市| 托克逊县| 区。| 麻栗坡县|