我想每行讀取一個(gè)輸出命令行。為此,我使用StdoutPipe方法和bufio庫:package mainimport ( "encoding/json" "fmt" "log" "os/exec" "bufio")func main() { cmd := exec.Command("printf", "{\"Name\": \"Bob\", \"Age\": 1}\n%.0s", "{1..5}") stdout, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } scanner := bufio.NewScanner(stdout) if err := cmd.Start(); err != nil { log.Fatal(err) } var person struct { Name string Age int } for scanner.Scan() { if err := json.Unmarshal([]byte(scanner.Text()), &person); err != nil { log.Fatal(err) } else { fmt.Printf("%s is %d years old\n", person.Name, person.Age) } } if err := cmd.Wait(); err != nil { log.Fatal(err) }}我應(yīng)該獲得 5 行:$ printf "{\"Name\": \"Bob\", \"Age\": 1}\n%.0s" {1..5}{"Name": "Bob", "Age": 1}{"Name": "Bob", "Age": 1}{"Name": "Bob", "Age": 1}{"Name": "Bob", "Age": 1}{"Name": "Bob", "Age": 1}關(guān)鍵是我只得到第一行。我很新Go,我猜 StdoutPipe 的用法是不正確的。
1 回答

慕無忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
{1..5}
被1 2 3 4 5
shell擴(kuò)展為,所以你必須自己做:
cmd := exec.Command("printf", `{"Name": "Bob", "Age": %s}\n`, `1`, `2`) // etc.
還要注意原始字符串的使用,它比不斷轉(zhuǎn)義所有內(nèi)容要方便得多。在相關(guān)說明中,[]byte(scanner.Text())
您應(yīng)該真正使用scanner.Bytes()
.
- 1 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報(bào)
0/150
提交
取消