Go 中外部命令寫入 STDIN
在 Go 中,執行外部命令時,經常需要透過 STDIN 提供輸入。本文探討了一種在處理需要多個輸入欄位的命令時將輸入寫入 STDIN 的技術。
讓我們考慮一個按順序提示輸入使用者名稱和密碼的命令,例如「登入」命令。要以程式設計方式提供這些輸入,我們需要寫入命令的 STDIN。
最初的方法是手動處理輸入字段,如以下程式碼所示:
<code class="go">login := exec.Command(cmd, "login") login.Stdout = os.Stdout login.Stdin = os.Stdin login.Stderr = os.Stderr err := login.Run() if err != nil { fmt.Fprintln(os.Stderr, err) }</code>
但是,此方法不允許程式輸入。解決方案在於利用 bytes.Buffer 來組裝輸入。這是改進的程式碼:
<code class="go">login := exec.Command(cmd, "login") var b bytes.Buffer b.Write([]byte(username + "\n" + pwd + "\n")) login.Stdout = os.Stdout login.Stdin = &b login.Stderr = os.Stderr</code>
bytes.Buffer 充當字元緩衝區。透過寫入由換行符分隔的使用者名稱和密碼,我們實質上建構了外部命令將依序讀取的輸入序列。命令的 Stdin 欄位分配了緩衝區,確保輸入被饋送到命令的進程中。
這種方法可以自動輸入具有多個輸入欄位的外部命令,簡化了 Go 與其他命令之間的互動-線條工具。
以上是如何以程式設計方式為 Go 中的外部命令提供多個輸入欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!