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