首頁 > 後端開發 > Golang > 如何偵測 Go 的 STDIN 輸入是來自管線還是終端機?

如何偵測 Go 的 STDIN 輸入是來自管線還是終端機?

Mary-Kate Olsen
發布: 2024-12-15 10:26:15
原創
498 人瀏覽過

How Can I Detect if Go's STDIN Input is from a Pipe or a Terminal?

在Go 中偵測STDIN 資料可用性

在程式碼中,您的目標是區分資料何時透過管道傳輸到STDIN 以及何時執行從終端。挑戰在於解決 ioutil.ReadAll() 的阻塞性質,當 STDIN 為空時,它會無限期地等待輸入。

解決方案:使用 os.ModeCharDevice

為了解決這個問題,我們可以利用 os.ModeCharDevice 來確定 STDIN 是否與終端或管道關聯。操作方法如下:

說明:

  • stat, _ := os.Stdin.Stat():擷取 STDIN 的檔案資訊。
  • if (stat.Mode() & os.ModeCharDevice) == 0:檢查 STDIN 檔案模式是否未設定 os.ModeCharDevice 位元。

    • 如果 STDIN 是管道,則其模式通常不是設定了 os.ModeCharDevice 位元。
    • 如果STDIN 是終端,其模式通常會有os.ModeCharDevice 位元
  • 根據此檢查,程式會列印對應的訊息,指示資料是否透過管道傳送到STDIN,或是否從終端執行。

以上是如何偵測 Go 的 STDIN 輸入是來自管線還是終端機?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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