golang執(zhí)行命令操作 exec.Command
我就廢話不多說了,大家還是直接看代碼吧~
cmd := exec.Command("cmd")
in := bytes.NewBuffer(nil)
cmd.Stdin = in//綁定輸入
var out bytes.Buffer
cmd.Stdout = &out //綁定輸出
go func() {
in.WriteString("node E:/design/test.js\n")//寫入你的命令,可以有多行,"\n"表示回車
}()
err = cmd.Start()
if err != nil {
log.Fatal(err)
}
log.Println(cmd.Args)
err = cmd.Wait()
if err != nil {
log.Printf("Command finished with error: %v", err)
}
fmt.Println(out.String())
補充:golang 執(zhí)行外部命令 超時處理 exec.CommandContext
使用exec.CommandContext來處理外部命令的超時
func main() {
timeout := 5
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout+5)*time.Second)
defer cancel()
cmdarray := []string{"-c", fmt.Sprintf("%s %s", "sleep", "10")}
cmd := exec.CommandContext(ctx, "bash", cmdarray...)
out, err := cmd.CombinedOutput()
//if ctx.Err() == context.DeadlineExceeded {}
fmt.Printf("ctx.Err : [%v]\n", ctx.Err())
fmt.Printf("error : [%v]\n", err)
fmt.Printf("out : [%s]\n", string(out))
}
運行結(jié)果是:
ctx.Err : [context deadline exceeded] error : [signal: killed] out : []
如果是一個命令錯誤輸出是什么:
下面這個例子是使用sleep不帶參數(shù),顯示是錯誤的。
cmdarray := []string{"-c", fmt.Sprintf("%s %s", "sleep", "")}
ctx.Err : [<nil>] error : [exit status 1] out : [usage: sleep seconds ]
可以命令的執(zhí)行錯誤不會導致ctx.Err()錯誤。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實現(xiàn)基本操作詳解
這篇文章主要為大家介紹了go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實現(xiàn)基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
go-zero讀取請求體出現(xiàn)EOF錯誤的解決方法
這篇文章主要為大家詳細介紹了go-zero讀取請求體出現(xiàn)EOF錯誤時如何解決,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-02-02
go語言int64整型轉(zhuǎn)字符串的實現(xiàn)
本文主要介紹了go語言int64整型轉(zhuǎn)字符串的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
使用Golang實現(xiàn)對網(wǎng)絡數(shù)據(jù)包的捕獲與分析
在網(wǎng)絡通信中,網(wǎng)絡數(shù)據(jù)包是信息傳遞的基本單位,抓包是一種監(jiān)控和分析網(wǎng)絡流量的方法,用于獲取網(wǎng)絡數(shù)據(jù)包并對其進行分析,本文將介紹如何使用Golang實現(xiàn)抓包功能,包括網(wǎng)絡數(shù)據(jù)包捕獲和數(shù)據(jù)包分析,需要的朋友可以參考下2023-11-11

