Heim >Backend-Entwicklung >Golang >Wie leite ich Eingaben in Go an exec.Command() um?

Wie leite ich Eingaben in Go an exec.Command() um?

Barbara Streisand
Barbara StreisandOriginal
2024-12-05 04:21:09373Durchsuche

How to Redirect Input to exec.Command() in Go?

Eingabe umleiten mit exec.Command()

Das Ausgeben von Befehlen mit Eingabeumleitung in Go kann eine Herausforderung sein. Betrachten Sie die übliche Befehlszeilenoperation:

/sbin/iptables-restore < /etc/iptables.conf

Dieser Befehl weist iptables-restore an, seine Konfiguration aus /etc/iptables.conf zu lesen. Wie können wir dies mit exec.Command() von Go erreichen?

Fehlgeschlagene Versuche

Erste Versuche, den Pfad der Eingabedatei als Argumente zu übergeben oder den Dateinamen an stdin weiterzuleiten waren erfolglos.

// Fails
cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf")

// Also fails
cmd := exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf")

// Attempt to pipe file name into stdin
// Fails
cmd := exec.Command("/sbin/iptables-restore")
stdin, err := cmd.StdinPipe()
if err != nil {
    log.Fatal(err)
}

err = cmd.Start()
if err != nil {
    log.Fatal(err)
}

io.WriteString(stdin, "/etc/iptables.conf")

Lösung: Datei lesen und schreiben Inhalte

Um den Befehl erfolgreich auszuführen, müssen wir zuerst den Inhalt von /etc/iptables.conf lesen und diesen Inhalt dann in die StdinPipe() schreiben.

package main

import (
    "io"
    "io/ioutil"
    "log"
    "os/exec"
)

func main() {
    bytes, err := ioutil.ReadFile("/etc/iptables.conf")
    if err != nil {
        log.Fatal(err)
    }
    cmd := exec.Command("/sbin/iptables-restore")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        log.Fatal(err)
    }
    err = cmd.Start()
    if err != nil {
        log.Fatal(err)
    }
    _, err = io.WriteString(stdin, string(bytes))
    if err != nil {
        log.Fatal(err)
    }
}

Das obige ist der detaillierte Inhalt vonWie leite ich Eingaben in Go an exec.Command() um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn