Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengalihkan Input ke `exec.Command` dengan betul dalam Go?

Bagaimana untuk Mengalihkan Input ke `exec.Command` dengan betul dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-05 05:49:09
asal
430 orang telah melayarinya

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

exec.Command dengan Input Redirection

Dalam Go, fungsi exec.Command membolehkan pelaksanaan perintah luaran. Untuk mengubah hala input ke dalam arahan melalui paip, kaedah StdinPipe mesti digunakan.

Pertimbangkan tugas berikut: menjalankan perintah "/sbin/iptables-restore < /etc/iptables.conf". Perintah ini mengemas kini IPTables berdasarkan fail konfigurasi, tetapi mengkonfigurasi pengalihan input menggunakan exec.Command boleh menjadi satu cabaran.

Percubaan pertama, exec.Command("/sbin/iptables-restore", "< ;", "/etc/iptables.conf"), salah tafsir < sebagai bendera perintah. Selain itu, menggunakan exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") mentafsir < sebagai hujah kepada IPTables dan mengakibatkan ralat.

Untuk menyelesaikan masalah ini, berikan data input secara eksplisit melalui paip 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)
    }
}
Salin selepas log masuk

Dengan kod ini, fail konfigurasi IPTables dibaca dan ditulis ke dalam cmd.StdinPipe(), mencapai ubah hala input yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Input ke `exec.Command` dengan betul dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan