首頁 > 後端開發 > Golang > 如何在 Go 中正確地將輸入重新導向到 `exec.Command`?

如何在 Go 中正確地將輸入重新導向到 `exec.Command`?

Mary-Kate Olsen
發布: 2024-12-05 05:49:09
原創
426 人瀏覽過

How to Properly Redirect Input to `exec.Command` in Go?

帶有輸入重定向的 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中文網其他相關文章!

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