passer par l'exemple exécutant un sous-processus
Exécutez le processus enfant à l'aide du package OS / EXEC, créez la commande via exec.command mais ne s'exécutez pas immédiatement; 2. Exécutez la commande avec .output () et attrapez stdout. Si le code de sortie est non nul, return exec.exiterror; 3. Utilisez .Start () pour démarrer le processus sans blocage, et combinez avec .stdoutPipe () pour diffuser la sortie en temps réel; 4. Entrez les données dans le processus via .stDinpipe (), et après avoir écrit, vous devez fermer le pipeline et appeler .wait () pour attendre la fin; 5. exec.exiterror doit être traité pour obtenir le code de sortie et le stderr de la commande raté pour éviter les processus zombies.
L'exécution d'un sous-processus dans GO est simple à l'aide du package os/exec
. Voici un exemple pratique montrant comment exécuter une commande externe, capturer sa sortie et gérer les erreurs.

Exemple de base: exécutez ls
(ou dir
sur Windows)
package principal importer ( "FMT" "Io" "enregistrer" "OS" "OS / EXEC" ) func main () { var cmd * exec.cmd // Choisissez la commande basée sur le système d'exploitation Si os.pathseparator == '\\' { // Windows cmd = exec.command ("cmd", "/ c", "dir") } autre { // Unix-like: Linux, macOS cmd = exec.command ("ls", "-l") } // capture la sortie sortie, err: = cmd.output () Si err! = Nil { Si exiterror, ok: = err. (* exec.exiterror); d'accord { // Commande a été exécutée mais est sortie avec un statut non nul fmt.fprintf (os.stderr, "La commande a échoué avec le code de sortie:% d \ n", exiterror.exitcode ()) fmt.fprintf (os.stderr, "stderr:% s \ n", exiterror.stderr) } autre { // autre erreur (par exemple, commande non trouvée) log.fatalf ("Échec de l'exécution de la commande:% v", err) } Retour } // imprime la sortie fmt.printf ("sortie de commande: \ n% s \ n", sortie) }
Exécutez une commande de commande et de flux en temps réel
Parfois, vous ne voulez pas attendre que la commande se termine - diffusez simplement STDOUT / STDERR au fur et à mesure.
func runwithStreamingOutput () { cmd: = exec.command ("ping", "-c", "5", "google.com") // Obtenez un tuyau stdout stdout, err: = cmd.stdoutpipe () Si err! = Nil { Log.fatalf ("Erreur d'obtention du tuyau stdout:% V", ERR) } // Démarrez la commande Si err: = cmd.start (); err! = Nil { log.fatalf ("Commande de démarrage d'erreur:% v", err) } // Stream de sortie ligne par ligne lecteur: = io.teeReader (stdout, os.stdout) _, _ = io.readall (lecteur) // attendez que la commande termine Si err: = cmd.wait (); err! = Nil { Log.printf ("Commande terminée avec l'erreur:% V", ERR) } }
Passer l'entrée à un sous-processus
Si vous devez envoyer une entrée (par exemple, à un script ou à un outil interactif):

func runwithinput () { cmd: = exec.command ("grep", "bonjour") stdin, err: = cmd.stdinpipe () Si err! = Nil { Log.fatalf ("Erreur d'obtention du tuyau stdin:% V", ERR) } // N'oubliez pas de démarrer la commande * après * Configuration des tuyaux Si err: = cmd.start (); err! = Nil { log.fatalf ("Commande de démarrage d'erreur:% v", err) } // Écrivez l'entrée fmt.fprintln (Stdin, "Hello World") fmt.fprintln (Stdin, "Goodbye World") stdin.close () // capture et imprimez les lignes de correspondance sortie, _: = io.readall (cmd.stdout) fmt.printf ("correspondant:% s", sortie) // attendez l'achèvement cmd.wait () }
Points clés pour se souvenir
- Utilisez
exec.Command()
pour configurer la commande, mais il ne l'exécute pas immédiatement. -
.Output()
Exécute la commande et renvoie Stdout (échoue si le code de sortie ≠ 0). -
.Start()
démarre le processus (non bloquant),.Run()
démarre et attend. - Appelez toujours
.Wait()
si vous utilisez.Start()
, pour éviter les processus zombies. - Gire
*exec.ExitError
pour obtenir des codes de sortie et stderr à partir des commandes échouées.
Fondamentalement, os/exec
vous donne un contrôle total, que vous souhaitiez capturer la sortie, le diffuser ou l'entrée de nourriture. Soyez juste prudent avec les chemins, les arguments et les types d'erreur.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

FataleRrorsInphPhaltexEcutionAndCannotBecaughtByTry-Catchblocks.2.UseRegister_Shutdown_Function () TODETECTFATALERRORSVIAERROR_GET_LAST () ANDRESPONDAPROPROPROPROPROPROPROPROPROPROPROPROPROPROPROPROPTOR

Utilisez la fonction Array_Unique () pour supprimer les valeurs en double dans le tableau, conserver les éléments d'apparence et convaincre les tableaux d'indexation et associatifs, par exemple: $ fruits = ['pomme', 'banana', 'Apple', 'Orange', 'Banana']; $ UNIQUE_FRUITS = Array_Unique ($ fruits); Le résultat est [«pomme», «banane», «orange»]; Cette fonction conserve le nom de clé d'origine, si vous avez besoin de réindexer, vous pouvez utiliser array_values (); Notez qu'il est basé sur la comparaison des chaînes et que les types mixtes peuvent affecter les résultats. Si vous devez vérifier strictement, il est recommandé de le traiter dans une boucle personnalisée.

UsepreparedstatementsWithpDoOrMysqlitoseParatesqllogicfromdata, empêchant le point de vue

Le constructeur __Contruct () est automatiquement exécuté lorsque l'objet est créé et utilisé pour l'initialisation, tel que l'attribution ou l'établissement de connexions; 2. Le destructeur __Drestruct () est appelé lorsque l'objet est détruit et est utilisé pour libérer des ressources, tels que la fermeture d'un fichier. Les deux gèrent conjointement le cycle de vie de l'objet PHP.

Useis_null () ou === TOCHECK FORNULLINPHP.IS_NULL ($ était) returnstrueif $ Varisnull.al Alternatives, $ était === ZerensuresOnlyNullvaluSe esreturnTrue, False EvaluatotherFaltothesyvalues Zone de l'assitmayincorrectyeveatotherfalsyvalues.

Le générateur enregistre efficacement la mémoire en sortissant des valeurs une par une plutôt que de renvoyer le tableau complet à la fois. Utilisez la fonction de rendement pour retourner l'objet générateur, générer des valeurs selon les besoins et éviter une grande quantité de mémoire consommatrice de données.

Assurez-vous que les ensembles de réseaux - IPhone: paramètres: paramètres> MobileNetwork> Advancedwork> Advanced

UsetET_time_limit (30) TolimitsScriptExecutionto30seconds, avec 0removingLIMITS; 2.AdjustMax_execution_timeInphp.Iniforglobalsettings, obligatoire
