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

Comment rediriger l'entrée vers exec.Command() dans Go ?

Barbara Streisand
Libérer: 2024-12-05 04:21:09
original
318 Les gens l'ont consulté

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

Redirection des entrées avec exec.Command()

Émettre des commandes avec redirection des entrées dans Go peut être un défi. Considérez l'opération courante en ligne de commande :

/sbin/iptables-restore < /etc/iptables.conf
Copier après la connexion

Cette commande indique à iptables-restore de lire sa configuration à partir de /etc/iptables.conf. Comment pouvons-nous accomplir cela avec exec.Command() de Go ?

Tentatives infructueuses

Tentatives initiales pour transmettre le chemin du fichier d'entrée en tant qu'arguments ou diriger le nom du fichier vers stdin ont échoué.

// 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")
Copier après la connexion

Solution : lecture et écriture du fichier Contenu

Pour exécuter avec succès la commande, nous devons d'abord lire le contenu de /etc/iptables.conf puis écrire ce contenu dans StdinPipe().

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)
    }
}
Copier après la connexion

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