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