pretty code

2021年8月26日 星期四

Golang os/exec command

最近為了抓取資料分析,需要定時執行一個 linux command 並儲存結果,由於最近都在使用 Golang,當然優先考慮使用 Golang 開發。

在 os/exec 有一個 Cmd struct,我們可以使用 exec.Command(...) 來得到這個 Cmd 指標,接著可以使用 Cmd.Output( ) 得到執行結果。

看似很單純的程式,但只有第一次執行成功,接著都會失敗,錯誤訊息為"exec: Stdout already set"。

看了一下 source code,原來是程式會檢查 c.Stdout 是不是有設定過,換句話說,這個 struct 只能使用一次,不能重覆使用,解決方式也很簡單,不要使用 for loop 外面的變數,每次在 loop 裡面重新 new 一個即可。

另外,由於 linux command 的結果已經帶有換行字元,我們在顯示執行結果時就不需要再加換行字元了。

可惡,害我要明天才能看到結果,今天沒有心情做事了XD

沒有留言: