Table des matières
Exemple de base: exécutez ls (ou dir sur Windows)
Exécutez une commande de commande et de flux en temps réel
Passer l'entrée à un sous-processus
Points clés pour se souvenir
Maison développement back-end Golang passer par l'exemple exécutant un sous-processus

passer par l'exemple exécutant un sous-processus

Aug 06, 2025 am 09:05 AM
php java programmation

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.

passer par l'exemple exécutant un sous-processus

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.

passer par l'exemple exécutant un sous-processus

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):

passer par l'exemple exécutant un sous-processus
 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!

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

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

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment gérer les erreurs mortelles en PHP? Comment gérer les erreurs mortelles en PHP? Sep 04, 2025 am 09:17 AM

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

Comment supprimer les valeurs en double d'un tableau en PHP? Comment supprimer les valeurs en double d'un tableau en PHP? Sep 05, 2025 am 08:28 AM

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.

Comment empêcher l'injection SQL en PHP? Comment empêcher l'injection SQL en PHP? Sep 05, 2025 am 05:27 AM

UsepreparedstatementsWithpDoOrMysqlitoseParatesqllogicfromdata, empêchant le point de vue

Qu'est-ce qu'un constructeur et un destructeur en PHP? Qu'est-ce qu'un constructeur et un destructeur en PHP? Sep 05, 2025 am 08:48 AM

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.

Comment vérifier si une variable est nul en PHP? Comment vérifier si une variable est nul en PHP? Sep 05, 2025 am 08:35 AM

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

Comment utiliser les générateurs pour enregistrer la mémoire en PHP? Comment utiliser les générateurs pour enregistrer la mémoire en PHP? Sep 06, 2025 am 04:04 AM

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.

L'appel Wi-Fi ne fonctionne pas L'appel Wi-Fi ne fonctionne pas Sep 05, 2025 am 04:44 AM

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

Comment définir un temps mort pour un script en PHP? Comment définir un temps mort pour un script en PHP? Sep 05, 2025 am 08:37 AM

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

See all articles