首頁 >後端開發 >Golang >如何在執行過程中即時串流部分命令輸出?

如何在執行過程中即時串流部分命令輸出?

DDD
DDD原創
2024-12-27 09:04:11835瀏覽

How Can I Stream Partial Command Output in Real-Time During Execution?

串流指令輸出進度

在執行指令的過程中,經常需要將輸出串流傳輸到指定的輸出位置並即時日誌檔。但是,在處理冗長的過程時,cmd.StdoutPipe 方法僅以字串形式提供最終結果。本文深入研究了在命令執行過程中啟用部分輸出流的方法。

問題中提供的範例利用 bufio.NewScanner 透過管線讀取標準輸出。一個常見的誤解是它是逐行讀取的。實際上,它透過 bufio.ScanLines 函數定義的換行符讀取輸入。如果執行的命令不產生換行符,則不會立即傳回輸出。

解決方法:

要克服此限制,請考慮替代方法:

  1. bufio.Split(bufio.ScanRunes(bufio.ScanRunes ):這個方法允許以符文(字元)讀取,確保每當新符文可用時返回輸出。
  2. 手動位元組/符文讀取:它涉及建立緩衝區數組並重複讀取任一位元組或代表完整符文的位元組片。

讀取標準輸出和錯誤至關重要,以防止子進程中由於以下原因而潛在的阻塞:完整的緩衝區。預設情況下,子程序的標準輸出和錯誤流將被丟棄。但是,如果不讀取標準錯誤流,可能會出現錯誤訊息遺失的情況。

以上是如何在執行過程中即時串流部分命令輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn