在 Go 中,執行外部命令並管理其輸入和輸出是一項常見任務。但是,在處理提示使用者輸入的命令(例如「登入」)時,以程式設計方式自動執行這些輸入可能具有挑戰性。
解決此問題的一種方法是直接寫入命令的標準輸入(stdin) )使用位元組緩衝區。讓我們深入研究提供的解決方案:
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
在此程式碼中,我們建立一個名為 b 的 bytes.Buffer,並將使用者名稱和密碼與換行符號連接起來。然後,我們將 b 分配給登入命令的 Stdin 字段,有效地將緩衝區連接到命令的輸入流。
當命令執行時,它將從 b 讀取字符,直到遇到換行符,將其解釋為用戶名。然後它將讀取直到下一個換行符,並將其視為密碼。透過以這種方式手動寫入緩衝區,我們繞過了使用者互動的需要,並以程式設計方式提供必要的輸入。
請記住,stdin 是一個字元緩衝區,命令通常會讀取輸入,直到遇到換行符。該技術可讓您在將輸入提供給外部命令之前對其進行緩衝和排序,從而自動執行輸入過程,而無需使用者手動幹預。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3