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

Wie leite ich Eingaben in Go zu „exec.Command()' um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-07 15:54:13238Durchsuche

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

Befehle mit Eingabeumleitung mit exec.Command() ausführen

Exec.Command() bietet in Go eine bequeme Möglichkeit, externe Befehle auszuführen. Allerdings kann die Handhabung der Eingabeumleitung eine Herausforderung darstellen. In dieser Diskussion wird untersucht, wie Sie mit exec.Command() den Befehl /sbin/iptables-restore < ausführen. /etc/iptables.conf.

Zunächst wird versucht, den Befehl mit < einzurichten. und < /etc/iptables.conf ist fehlgeschlagen. Auch das Weiterleiten des Dateinamens über stdin hat nicht funktioniert. Um die Eingabe stattdessen an stdin umzuleiten, ist es notwendig, zuerst den Inhalt der Eingabedatei /etc/iptables.conf zu lesen.

So erreichen Sie dies:

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)
    }
}

Dieser Ansatz ermöglicht es uns, den Inhalt der Datei zu lesen, ihn an die stdin des Befehls weiterzuleiten und dann den Befehl mit der gewünschten Eingabeumleitung zu starten.

Das obige ist der detaillierte Inhalt vonWie leite ich Eingaben in Go zu „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