首頁 > 後端開發 > Golang > 如何將即時命令輸出串流傳輸到父進程和日誌檔案?

如何將即時命令輸出串流傳輸到父進程和日誌檔案?

Linda Hamilton
發布: 2024-12-15 07:26:13
原創
805 人瀏覽過

How to Stream Real-time Command Output to Parent Process and Log File?

串流命令:即時輸出進度

在此場景中,您的目標是將已執行命令的輸出串流傳輸到父進程和日誌檔案。但是,標準 cmd.StdoutPipe 以字串形式傳回最終結果,這成為長時間運行的進程的限制。

探索解決方案

提供的程式碼,它利用 exec.Command, StdoutPipe 和 bufio.NewScanner 按預期工作。它有效地串流傳輸子進程的輸出,將其列印到控制台並即時記錄。子進程的即時輸出在發生時被捕獲並顯示。

故障排除提示

如果程式碼不適合您,請考慮以下原因:

  • 缺少換行符: bufio.NewScanner 讀取整行,僅在遇到換行符號時傳回資料人物。如果命令不列印換行符,則可能不會立即串流輸出。
  • 指令輸出緩衝區:行程具有 stdout 和 stderr 的預設緩衝區大小。如果緩衝區已滿但未讀取,子程序可能會因阻塞寫入而掛起。因此,請務必讀取 stdout 和 stderr 以防止此問題。

可能的解決方法

如果指令不列印換行符,還有其他方法來串流輸出:

  • 逐詞閱讀:將掃描器分割功能設定為bufio.ScanWords 讀取單字而不是行。
  • 以字元讀取: 將掃描器分割功能設定為 bufio.ScanRunes 逐一讀取字元。
  • 手動讀取:逐字節或逐個符文讀取stdout,確保處理UTF-8編碼

重要的是要記住,如果子程序寫入其預設的stdout 和stderr 流,除非明確讀取,否則它們將被丟棄。讀取這些流可確保您不會錯過任何輸出或錯誤訊息,即使子進程通常不會輸出到這些流。

以上是如何將即時命令輸出串流傳輸到父進程和日誌檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板