1
我有一個腳本,在運行時將相當多的文本轉儲到STDOUT。我試圖執行這個腳本並將輸出寫入一個文件,而不是一次將整個緩衝區保存在內存中。 (我們正在談論這個腳本一次輸出的許多MB文本。)複製exec.Command輸出到文件,因爲緩衝區接收數據
以下工作,但因爲我在幾個例程中執行此操作,所以我的內存消耗高達> 5GB,我真的很喜歡避免:
var out bytes.Buffer
cmd := exec.Command("/path/to/script/binary", "arg1", "arg2")
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
out.WriteTo(io) // io is the writer connected to the new file
理想的情況下爲out
填滿了,我想被排空到我的目標文件,以保持內存使用率較低。我試圖改變這:
cmd := exec.Command("/path/to/script/binary", "arg1", "arg2")
cmd.Start()
stdout, _ := cmd.StdoutPipe()
r := *bufio.NewReader(stdout)
r.WriteTo(io)
cmd.Wait()
然而,當我打印出這些變量stdout
是<nil>
,r
是{[0 0 0 0 0...]}
和r.WriteTo
恐慌:invalid memory address or nil pointer dereference
。
是否有可能在生成cmd
時輸出內容以減少內存使用量?謝謝!
哇!我沒有意識到這是可能的(目標文件不在我的機器上)。完全同意,只是稱其爲'io'來從我的例子中刪除不相關的專有內容,但即使如此,也許應該避免這種情況以消除混淆。謝謝! – Ryan