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())
補(bǔ)充: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))
}
運(yùn)行結(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í)行錯誤不會導(dǎo)致ctx.Err()錯誤。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解
這篇文章主要為大家介紹了go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
go-zero讀取請求體出現(xiàn)EOF錯誤的解決方法
這篇文章主要為大家詳細(xì)介紹了go-zero讀取請求體出現(xiàn)EOF錯誤時如何解決,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
go語言int64整型轉(zhuǎn)字符串的實(shí)現(xiàn)
本文主要介紹了go語言int64整型轉(zhuǎn)字符串的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Golang 實(shí)現(xiàn)超大文件讀取的兩種方法
這篇文章主要介紹了Golang 實(shí)現(xiàn)超大文件讀取的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
使用Golang實(shí)現(xiàn)對網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與分析
在網(wǎng)絡(luò)通信中,網(wǎng)絡(luò)數(shù)據(jù)包是信息傳遞的基本單位,抓包是一種監(jiān)控和分析網(wǎng)絡(luò)流量的方法,用于獲取網(wǎng)絡(luò)數(shù)據(jù)包并對其進(jìn)行分析,本文將介紹如何使用Golang實(shí)現(xiàn)抓包功能,包括網(wǎng)絡(luò)數(shù)據(jù)包捕獲和數(shù)據(jù)包分析,需要的朋友可以參考下2023-11-11
使用go進(jìn)行云存儲上傳實(shí)現(xiàn)實(shí)例
這篇文章主要為大家介紹了使用go進(jìn)行云存儲上傳實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2024-01-01
Go中使用操作符進(jìn)行數(shù)學(xué)運(yùn)算的示例代碼
在編程中有效地執(zhí)行數(shù)學(xué)運(yùn)算是一項(xiàng)需要開發(fā)的重要技能,本文主要介紹了Go中使用操作符進(jìn)行數(shù)學(xué)運(yùn)算的示例代碼,具有一定的參考價值,感興趣的可以了解一下2023-10-10

