青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


專注即時通訊及網游服務端編程
------------------------------------
Openresty 官方模塊
Openresty 標準模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重??!如為您帶來不便,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 220943
  • 排名 - 117

最新評論

閱讀排行榜

golang os/exec 執行外部命令

exec包執行外部命令,它將os.StartProcess進行包裝使得它更容易映射到stdin和stdout,并且利用pipe連接i/o.

func LookPath(file string) (string, error) //LookPath在環境變量中查找科執行二進制文件,如果file中包含一個斜杠,則直接根據絕對路徑或者相對本目錄的相對路徑去查找

[html] view plain copy
  1. func main() {  
  2.     f, err := exec.LookPath("ls")  
  3.     if err != nil {  
  4.         fmt.Println(err)  
  5.     }  
  6.     fmt.Println(f) //  /bin/ls  
  7. }  


type Cmd   //表示一個正在準備或者正在運行的外部命令

[html] view plain copy
  1. type Cmd struct {  
  2.     Path         string   //運行命令的路徑,絕對路徑或者相對路徑  
  3.     Args         []string   // 命令參數  
  4.     Env          []string         //進程環境,如果環境為空,則使用當前進程的環境  
  5.     Dir          string   //指定command的工作目錄,如果dir為空,則comman在調用進程所在當前目錄中運行  
  6.     Stdin        io.Reader  //標準輸入,如果stdin是nil的話,進程從null device中讀?。╫s.DevNull),stdin也可以時一個文件,否則的話則在運行過程中再開一個goroutine去  
  7.              //讀取標準輸入  
  8.     Stdout       io.Writer       //標準輸出  
  9.     Stderr       io.Writer  //錯誤輸出,如果這兩個(Stdout和Stderr)為空的話,則command運行時將響應的文件描述符連接到os.DevNull  
  10.     ExtraFiles   []*os.File     
  11.     SysProcAttr  *syscall.SysProcAttr  
  12.     Process      *os.Process    //Process是底層進程,只啟動一次  
  13.     ProcessState *os.ProcessState  //ProcessState包含一個退出進程的信息,當進程調用Wait或者Run時便會產生該信息.  
  14. }  

 

func Command(name string, arg ...string) *Cmd    //command返回cmd結構來執行帶有相關參數的命令,它僅僅設定cmd結構中的Path和Args參數,如果name參數中不包含路徑分隔符,command使用LookPath來解決路徑問題,否則的話就直接使用name;Args直接跟在command命令之后,所以在Args中不許要添加命令.

[html] view plain copy
  1. func main() {  
  2.     cmd := exec.Command("tr", "a-z", "A-Z")  
  3.     cmd.Stdin = strings.NewReader("some input")  
  4.     var out bytes.Buffer  
  5.     cmd.Stdout = &out  
  6.     err := cmd.Run()  
  7.     if err != nil {  
  8.         log.Fatal(err)  
  9.     }  
  10.     fmt.Printf("in all caps: %q\n", out.String())  //in all caps: "SOME INPUT"  
  11. }  

func (c *Cmd) CombinedOutput() ([]byte, error) //運行命令,并返回標準輸出和標準錯誤

[html] view plain copy
  1. func main() {  
  2.     cmd := exec.Command("ls")  //查看當前目錄下文件  
  3.     out, err := cmd.CombinedOutput()  
  4.     if err != nil {  
  5.         fmt.Println(err)  
  6.     }  
  7.     fmt.Println(string(out))  
  8. }  



func (c *Cmd) Output() ([]byte, error)     //運行命令并返回其標準輸出

[html] view plain copy
  1. func main() {  
  2.     cmd := exec.Command("ls") ///查看當前目錄下文件  
  3.     out, err := cmd.Output()  
  4.     if err != nil {  
  5.         fmt.Println(err)  
  6.     }  
  7.     fmt.Println(string(out))  
  8. }  

注意:Output()和CombinedOutput()不能夠同時使用,因為command的標準輸出只能有一個,同時使用的話便會定義了兩個,便會報錯

func (c *Cmd) Run() error          //開始指定命令并且等待他執行結束,如果命令能夠成功執行完畢,則返回nil,否則的話邊會產生錯誤
func (c *Cmd) Start() error          //使某個命令開始執行,但是并不等到他執行結束,這點和Run命令有區別.然后使用Wait方法等待命令執行完畢并且釋放響應的資源

[html] view plain copy
  1. func main() {  
  2.     cmd := exec.Command("ls")  
  3.     cmd.Stdout = os.Stdout //  
  4.     cmd.Run()  
  5.     fmt.Println(cmd.Start()) //exec: already started  
  6. }  

注:一個command只能使用Start()或者Run()中的一個啟動命令,不能兩個同時使用.

func (c *Cmd) StderrPipe() (io.ReadCloser, error)  //StderrPipe返回一個pipe,這個管道連接到command的標準錯誤,當command命令退出時,Wait將關閉這些pipe
func (c *Cmd) StdinPipe() (io.WriteCloser, error)   //StdinPipe返回一個連接到command標準輸入的管道pipe


[html] view plain copy
  1. package main  
  2.   
  3. import (  
  4.     "fmt"  
  5.     "os"  
  6.     "os/exec"  
  7. )  
  8.   
  9. func main() {  
  10.     cmd := exec.Command("cat")  
  11.     stdin, err := cmd.StdinPipe()  
  12.     if err != nil {  
  13.         fmt.Println(err)  
  14.     }  
  15.     _, err = stdin.Write([]byte("tmp.txt"))  
  16.     if err != nil {  
  17.         fmt.Println(err)  
  18.     }  
  19.     stdin.Close()  
  20.     cmd.Stdout = os.Stdout     //終端標準輸出tmp.txt  
  21.     cmd.Start()  
  22. }  


func (c *Cmd) StdoutPipe() (io.ReadCloser, error)        //StdoutPipe返回一個連接到command標準輸出的管道pipe

[html] view plain copy
  1. func main() {  
  2.     cmd := exec.Command("ls")  
  3.     stdout, err := cmd.StdoutPipe()  //指向cmd命令的stdout  
  4.     cmd.Start()  
  5.     content, err := ioutil.ReadAll(stdout)  
  6.     if err != nil {  
  7.         fmt.Println(err)  
  8.     }  
  9.     fmt.Println(string(content))     //輸出ls命令查看到的內容  
  10. }  



func (c *Cmd) Wait() error             //Wait等待command退出,他必須和Start一起使用,如果命令能夠順利執行完并順利退出則返回nil,否則的話便會返回error,其中Wait會是放掉所有與cmd命令相關的資源


type Error    //Error返回科執行二進制文件名字不能夠執行的原因的錯誤

[html] view plain copy
  1. type Error struct {  
  2.     Name string  
  3.     Err  error  
  4. }  


func (e *Error) Error() string


type ExitError  //一個command不能夠正常退出的error

[html] view plain copy
  1. type ExitError struct {  
  2.     *os.ProcessState  
  3. }  


func (e *ExitError) Error() string

posted on 2018-10-09 16:16 思月行云 閱讀(894) 評論(0)  編輯 收藏 引用 所屬分類: Golang
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            老司机免费视频一区二区| 国产婷婷色一区二区三区| 免费视频亚洲| 国产精品99久久久久久有的能看| 国产日产欧产精品推荐色| 国产精品午夜av在线| 国产精品免费aⅴ片在线观看| 亚洲欧美久久久| 日韩视频一区二区在线观看| 亚洲欧洲日本一区二区三区| 欧美电影电视剧在线观看| 美女999久久久精品视频| 欧美激情一级片一区二区| 亚洲激情另类| 午夜精品视频在线观看一区二区| 午夜国产精品视频| 久久精品人人爽| 欧美激情成人在线视频| 国产精品分类| 亚洲第一页在线| 一本久道久久综合狠狠爱| 欧美一区网站| 亚洲黑丝在线| 亚洲欧美在线免费观看| 欧美成人综合网站| 韩国女主播一区二区三区| 亚洲精品一二区| 久久久久国产精品一区三寸| 亚洲黄色在线视频| 久久国产精品毛片| 国产精品国产三级欧美二区| 黄色影院成人| 亚洲欧美三级伦理| 亚洲国产婷婷| 久久久五月天| 国产日产欧美a一级在线| 99精品欧美一区二区蜜桃免费| 欧美亚洲三级| 亚洲另类视频| 欧美电影在线播放| 国模套图日韩精品一区二区| 亚洲午夜在线观看| 亚洲成色777777女色窝| 欧美在线播放视频| 老巨人导航500精品| 久久久久亚洲综合| 国产精品人人爽人人做我的可爱| 亚洲第一综合天堂另类专| 午夜欧美大尺度福利影院在线看| 亚洲国产成人在线播放| 久久精品色图| 国产一区二区三区四区老人| 亚洲欧美日韩国产一区| 日韩视频一区二区在线观看| 欧美国产视频在线观看| 亚洲国产成人久久综合| 久久婷婷亚洲| 久久9热精品视频| 国产性天天综合网| 久久久国产精品一区| 亚洲综合色在线| 国产精品理论片| 欧美怡红院视频| 午夜精品久久久久久久99热浪潮| 欧美日韩国产经典色站一区二区三区| 亚洲国产精品久久久久久女王| 老妇喷水一区二区三区| 久久精品夜色噜噜亚洲a∨| 国内精品伊人久久久久av一坑| 久久精品日韩欧美| 久久日韩精品| 亚洲精品1区2区| 亚洲国产精品一区制服丝袜| 欧美激情一区二区在线 | 国产欧美在线看| 羞羞色国产精品| 久久狠狠婷婷| 亚洲黄色影片| 99视频在线观看一区三区| 国产精品xxxxx| 久久久女女女女999久久| 久久综合图片| 亚洲无人区一区| 欧美一区二区三区在线视频| 在线观看国产精品网站| 91久久精品国产91久久| 国产精品久久久久久久午夜| 久久免费视频这里只有精品| 美女露胸一区二区三区| 亚洲一品av免费观看| 久久精品伊人| 亚洲色图在线视频| 久久久久久久国产| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲精品少妇| 国产亚洲成av人在线观看导航| 另类亚洲自拍| 亚洲国产毛片完整版| 亚洲人成绝费网站色www| 日韩性生活视频| 国产一区二区三区在线播放免费观看| 欧美大片免费久久精品三p| 欧美三级电影精品| 美女视频黄a大片欧美| 国产精品v日韩精品v欧美精品网站| 久久久91精品国产一区二区精品| 欧美黄色大片网站| 久久亚洲一区二区| 国产精品久久久久久久久 | 夜夜爽99久久国产综合精品女不卡| 国产欧美一区二区三区沐欲| 欧美激情中文字幕一区二区| 国产精品一区免费视频| 亚洲精品视频啊美女在线直播| 国产一区二区三区高清播放| 亚洲免费av网站| 亚洲欧洲日韩综合二区| 欧美一区三区三区高中清蜜桃| 一本色道久久综合亚洲精品不卡| 久久久久久欧美| 久久久久国产一区二区三区四区 | 久久国产精品一区二区三区| 欧美另类69精品久久久久9999| 免费久久精品视频| 国产综合视频| 欧美一区二区播放| 欧美在线国产| 国产精自产拍久久久久久蜜| 一本久久综合亚洲鲁鲁| 亚洲精品国产精品国产自| 久久成人免费电影| 久久精品视频一| 国产啪精品视频| 欧美一区亚洲二区| 久久精品国产清自在天天线| 国产伦精品免费视频| 在线中文字幕一区| 亚洲欧美视频一区二区三区| 国产精品捆绑调教| 亚洲夜间福利| 欧美有码在线观看视频| 国产婷婷成人久久av免费高清| 午夜激情一区| 噜噜噜久久亚洲精品国产品小说| 亚洲福利国产| 欧美日韩不卡一区| 亚洲专区在线视频| 久久久久一区二区三区| 亚洲电影在线观看| 欧美精品日韩综合在线| 在线视频免费在线观看一区二区| 亚洲女女女同性video| 国产农村妇女毛片精品久久莱园子| 亚洲综合欧美日韩| 麻豆freexxxx性91精品| 亚洲人成网站色ww在线| 欧美日韩在线三级| 欧美专区中文字幕| 亚洲人午夜精品| 欧美一区二区三区久久精品| 尹人成人综合网| 亚洲精品国产精品国自产观看浪潮| 欧美黑人在线播放| 99精品久久久| 欧美诱惑福利视频| 尤物精品国产第一福利三区| 免费欧美日韩国产三级电影| 亚洲三级影片| 欧美自拍偷拍午夜视频| 1769国内精品视频在线播放| 欧美精品啪啪| 久久国产一二区| 亚洲精品小视频| 久久久久国内| 亚洲一区二区三区视频| 在线观看日韩av先锋影音电影院| 欧美精品大片| 久久国内精品自在自线400部| 亚洲黄色大片| 久久久精品一品道一区| 一本久道久久综合中文字幕| 国产偷自视频区视频一区二区| 欧美激情1区| 香蕉精品999视频一区二区| 亚洲欧洲精品天堂一级| 久久漫画官网| 亚洲欧美国产日韩天堂区| 亚洲电影免费| 国产综合欧美| 国产精品网站在线播放| 欧美激情亚洲视频| 久久久精品免费视频| 亚洲自拍电影| 亚洲精品免费在线播放| 蜜臀av一级做a爰片久久| 久久精彩视频| 欧美一区二区啪啪| 亚洲制服丝袜在线| 一本一道久久综合狠狠老精东影业| 国产一区视频在线观看免费|