Maison > développement back-end > Golang > Comment rediriger correctement l'entrée vers « exec.Command » dans Go ?

Comment rediriger correctement l'entrée vers « exec.Command » dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-05 05:49:09
original
426 Les gens l'ont consulté

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

exec.Command avec redirection d'entrée

En Go, la fonction exec.Command permet l'exécution de commandes externes. Pour rediriger l'entrée dans la commande via un tube, la méthode StdinPipe doit être utilisée.

Considérez la tâche suivante : exécuter la commande "/sbin/iptables-restore < /etc/iptables.conf". Cette commande met à jour les IPTables en fonction d'un fichier de configuration, mais configurer la redirection d'entrée à l'aide de exec.Command peut être un défi.

La première tentative, exec.Command("/sbin/iptables-restore", "< ;", "/etc/iptables.conf"), interprète mal le < comme drapeau de commande. De plus, l'utilisation de exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") interprète < comme argument à IPTables et entraîne une erreur.

Pour résoudre ce problème, fournissez les données d'entrée explicitement via le canal 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)
    }
}
Copier après la connexion

Avec ce code, le fichier de configuration IPTables est lu et écrit dans cmd.StdinPipe(), obtenant la redirection d'entrée souhaitée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal