這幾天在用golang寫乙個工具,要執行外部命令工具,而且還要將外部命令工具輸出的日誌也要輸出出來。網上找了一下,資料很多,關鍵是執行的結果成功或失敗狀態沒找到好的方法獲取到。
剛開始想的是看錯誤日誌,如果有錯誤日誌,那麼就是執行失敗。測試的時候發現這樣不行,發現有些時候會用error輸出日誌,但不一定就是執行失敗。後來想用日誌中puyrfgdqec的關鍵字匹配,因為有些命令執行成功或失敗都是有關鍵字輸出的,測試發現也不太好。
最後沒辦法,看了一下cmd.wait()方法的實現,突然眼前一亮,找到方法了,有乙個cmd.processstate結構體可以使用。於是整理了一下,貼一下**實現:
func exec(name string, args ...string) error
// 正常日誌
logscan := bufio.newscanner(stdout)
go func()
}()// 錯誤日puyrfgdqec志
errbuf := bytes.newbufferstring("")
scan := bufio.newscanner(stderr)
for scan.scan()
// 等待命令執行完
cmd.wait()
if !cmd.processstate.success()
return nil
}注意:上面**中沒有處理輸入的情況,如果待執行的命令需要輸入資料,則不適用。
總結本文位址:
Shardingsphere sql執行結果合併
之前講過,shardingpreparedstatement覆寫了executequery executeupdate execute等主要方法,這些方法中都有initpreparedstatementexecutor方法。這個方法主要是呼叫了preparedstatementexecutor.in...
Springboot 多執行緒 等待獲取執行結果
在日常的開發專案過程中,時常會有多執行緒的使用場景。最近開發的需求中也是如此,只不過這次需要開啟多執行緒去執行,最後要等所有執行緒結束統一獲取結果。所以在此整理一下 在springboot專案中開啟非同步執行緒需要滿足一下幾點 因為需要開啟多執行緒非同步執行並獲取其返回結果,所以選用future作為...
golang 程序執行外部命令
go程序執行 去觸發執行乙個外部程序 go程序裡面可以訪問外部程序的資訊 執行乙個外部程序來代替當前的go程序 go 提供乙個exec函式 package main import os os exec syscall func main exec函式需要乙個切片引數 我們給ls命令一些常見引數 注意...