帶有輸入重定向的 exec.Command
在 Go 中,exec.Command 函數可以執行外部命令。若要透過管道將輸入重定向到命令,必須使用 StdinPipe 方法。
考慮以下任務:執行指令「/sbin/iptables-restore /iptables.conf」。此命令根據設定檔更新 IPTable,但使用 exec.Command 設定輸入重定向可能是一個挑戰。
第一次嘗試,exec.Command("/sbin/iptables-restore", "< ;」、「/etc/iptables.conf」),誤解了
要解決此問題,請透過stdin 管道明確提供輸入資料:
package main import ( "io" "io/ioutil" "log" "os/exec" ) func main() { // Read the contents of the input file. bytes, err := ioutil.ReadFile("/etc/iptables.conf") if err != nil { log.Fatal(err) } // Create the command. cmd := exec.Command("/sbin/iptables-restore") // Get the stdin pipe. stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } // Start the command. err = cmd.Start() if err != nil { log.Fatal(err) } // Write the input data to the stdin pipe. _, err = io.WriteString(stdin, string(bytes)) if err != nil { log.Fatal(err) } // Ensure stdin is closed. err = stdin.Close() if err != nil { log.Fatal(err) } // Wait for the command to finish. err = cmd.Wait() if err != nil { log.Fatal(err) } }
使用此程式碼,將讀取IPTables 設定檔並寫入cmd.StdinPipe(),實現所需的輸入重定向。
以上是如何在 Go 中正確地將輸入重新導向到 `exec.Command`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!