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

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2017年3月>
2627281234
567891011
12131415161718
19202122232425
2627282930311
2345678


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

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 219795
  • 排名 - 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中讀取(os.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 思月行云 閱讀(889) 評論(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久久久久久| 国产日韩在线亚洲字幕中文| 国产精品一区二区你懂得| 国产九九精品| 黄色一区二区在线观看| 亚洲风情亚aⅴ在线发布| 亚洲国产精品va在看黑人| 亚洲人成亚洲人成在线观看| 日韩午夜在线电影| 亚洲综合国产| 久热精品在线视频| 91久久精品国产91久久性色| 欧美搞黄网站| 中文国产亚洲喷潮| 欧美在线一级va免费观看| 美女999久久久精品视频| 欧美精品久久天天躁| 国产精品任我爽爆在线播放| 一区二区三区在线视频观看| 99视频精品在线| 久久精品30| 91久久精品一区二区别| 亚洲欧美激情精品一区二区| 久久天天躁狠狠躁夜夜av| 欧美日韩成人综合在线一区二区| 国产毛片一区二区| 亚洲区国产区| 欧美一区成人| 91久久精品美女| 性刺激综合网| 欧美日韩国产精品一区| 国产一区在线免费观看| 一本一本久久| 欧美国产先锋| 久久精品一区二区| 国产精品美女久久| 亚洲日本中文字幕免费在线不卡| 欧美一区二区三区四区在线观看| 亚洲国产精品电影| 久久久噜噜噜久久| 国产乱码精品一区二区三区不卡| 亚洲人被黑人高潮完整版| 久久精品视频亚洲| 亚洲网站在线| 欧美日韩国产系列| 亚洲高清色综合| 久久久精品国产免大香伊| 一区二区三区四区在线| 欧美激情一区二区三区在线视频观看 | 欧美韩国日本一区| 欧美国产精品一区| 欧美国产精品人人做人人爱| 亚洲在线视频观看| 欧美国产第二页| 在线欧美日韩国产| 久久久久久久尹人综合网亚洲| 日韩网站在线| 欧美日韩你懂的| 日韩一区二区高清| 亚洲国产成人久久| 欧美成人综合| 亚洲国产欧美精品| 欧美激情1区2区| 欧美成人黑人xx视频免费观看| 在线观看亚洲视频| 裸体素人女欧美日韩| 久久视频在线视频| 亚洲激情国产| 亚洲激情国产| 欧美三区视频| 亚洲欧美综合国产精品一区| 亚洲无限av看| 国产亚洲欧洲一区高清在线观看| 亚洲自拍16p| 亚洲欧美精品中文字幕在线| 国产午夜精品福利 | 欧美成年人视频网站欧美| 久久久亚洲高清| 亚洲人成在线播放| 亚洲精品欧美专区| 国产精品嫩草99a| 久久精品中文| 美女主播精品视频一二三四| 亚洲伦理精品| 亚洲欧美韩国| 亚洲国产精品99久久久久久久久| 亚洲精品国产精品乱码不99| 国产精品99免费看 | 久久国产精品久久精品国产| 久久gogo国模裸体人体| 最新亚洲视频| 亚洲一区二区三区精品在线观看| 国产一区二区三区奇米久涩| 亚洲高清自拍| 国产伦精品一区二区三区四区免费| 久久久久久夜精品精品免费| 媚黑女一区二区| 亚洲欧美日韩综合| 久久久久久久综合日本| 一区二区三欧美| 欧美影院成年免费版| 亚洲毛片在线看| 性感少妇一区| 一区二区三区欧美日韩| 欧美在线视频免费播放| av成人免费| 久久久久久一区| 亚洲欧美精品中文字幕在线| 美女黄网久久| 久久裸体艺术| 免费亚洲电影在线观看| 欧美色精品天天在线观看视频| 欧美在线免费观看亚洲| 欧美精品免费播放| 另类av导航| 国产精品午夜视频| 亚洲黄色成人网| 在线精品亚洲| 欧美在线观看日本一区| 亚洲一区二区视频在线| 免费观看成人www动漫视频| 久久成人精品无人区| 欧美色图天堂网| 亚洲三级视频| 99国产精品视频免费观看一公开| 欧美一区二区三区四区在线观看 | 在线成人国产| 欧美一级久久久| 午夜精品久久久久久久蜜桃app| 欧美精品v国产精品v日韩精品| 久久日韩粉嫩一区二区三区| 国产精品一级久久久| 亚洲天堂视频在线观看| 亚洲一区二区三区四区在线观看| 欧美激情免费在线| 最新日韩中文字幕| 亚洲美女精品一区| 欧美久久精品午夜青青大伊人| 亚洲二区视频| 亚洲青色在线| 欧美韩国日本综合| 最新精品在线| 亚洲视频在线视频| 国产精品久久久久影院色老大| 在线一区二区三区四区五区| 亚洲午夜激情| 国产欧美 在线欧美| 午夜精品免费在线| 久久夜色精品国产| 亚洲高清视频在线观看| 女主播福利一区| 亚洲精品系列| 香蕉精品999视频一区二区| 国产精品毛片高清在线完整版| 亚洲性色视频| 久久综合久色欧美综合狠狠| 伊人狠狠色丁香综合尤物| 免费不卡在线视频| 日韩视频一区| 久久国产88| 91久久精品一区二区三区| 欧美交受高潮1| 亚洲一区二区三区欧美| 欧美在线视屏| 最新亚洲视频| 国产精品一二| 老司机aⅴ在线精品导航| 亚洲精品一区二区三区婷婷月| 亚洲综合视频1区| 激情综合久久| 国产精品成人午夜| 久久久精品网| 99国产精品视频免费观看一公开 | 亚洲五月六月| 欧美呦呦网站| 久久超碰97中文字幕| 久久久成人精品| 亚洲美女免费视频| 国产亚洲精品久久久久久| 女生裸体视频一区二区三区| 亚洲午夜激情网页| 亚洲高清免费| 欧美在线免费播放| 在线视频亚洲欧美| 伊人久久大香线| 国产精品日韩欧美一区二区三区| 久久夜色精品亚洲噜噜国产mv| 亚洲作爱视频| 亚洲第一精品在线| 久久久久国产精品人| 亚洲男人天堂2024| 亚洲精品久久久久久下一站| 国产亚洲精久久久久久| 欧美午夜不卡视频| 欧美成人亚洲成人| 久久久久亚洲综合| 欧美一区亚洲二区|