Functions > Process >


StderrRead

Lit dans le flux STDERR d'un processus enfant lancé au préalable.

StderrRead ( process_id [, peek = False [, binary = False]] )

Paramètres

process_id L'ID du processus enfant, tel que retourné par un appel précédent à Run.
peek [optionnel] Si True, la fonction ne supprime pas les caractères lus dans le flux.
binary [optionnel] Si True, la fonction lit les données de manière binaire au lieu de texte (par défaut, texte).

Valeur de retour

Succès: Retourne les données lues. @extended contient le nombre d'octets lus.
Échec: Définit @error <> 0 si EOF est atteint, STDERR n'a pas été redirigé pour le processus ou une autre erreur.

Remarques

StderrRead() lit à partir du flux de sortie standard de la console du processus enfant, qui est normalement utilisé par les applications console pour écrire sur l'écran. Durant l'appel de Run() pour le processus enfant, si vous souhaitez lire à partir du STD I/O, le paramètre doit avoir pris en compte la valeur $STDERR_CHILD (4) sinon cette fonction ne tavaillera pas correctement (voir la fonction Run()).

StderrRead() ne bloque pas, elle retournera immédiatement. Afin d'obtenir toutes les données, elle doit être appelée dans une boucle.

La lecture sur le flux ne supprime pas les données de la mémoire tampon, cependant, la fonction retourne les données disponibles comme d'habitude.

Par défaut, les données sont retournées au format texte. En utilisant l'option binaire, les données seront retournées au format binaire.

En relation

Run, RunAs, StdinWrite, StdioClose, StdoutRead

Exemple

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Le script Example.au3 est supposé absent du dossier @SystemDir, pour traiter l'erreur
    Local $iPID = Run(@ComSpec & " /c DIR Example.au3", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $sOutput = StdoutRead($iPID)
    While @error = 0 
        ; Sort de la boucle si le processus ferme ou si StdoutRead retourne une erreur.
        MsgBox($MB_SYSTEMMODAL, "Stdout Read:", $sOutput)
        $sOutput = StdoutRead($iPID)
    WEnd

    $sOutput = StderrRead($iPID)
    While @error = 0
        ; Sort de la boucle si le processus ferme ou si StderrRead retourne une erreur.
        MsgBox($MB_SYSTEMMODAL, "Stderr Read:", $sOutput)
        $sOutput = StderrRead($iPID)
    WEnd
EndFunc   ;==>Example