Functions > Process >


StdoutRead

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

StdoutRead ( 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 à partir du 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 déclenché, STDOUT n'a pas été redirigé pour le processus ou autre erreur.

Remarques

StdoutRead() 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. Pendant l'appel de Run() pour le processus enfant, pour lire à partir de STD I/O, le paramètre doit avoir inclus la valeur $STDOUT_CHILD (2) pour que cette fonction travaille correctement (voir la fonction Run()).

La fonction StdoutRead() ne bloque pas, elle retournera immédiatement. Afin d'obtenir toutes les données, elle doit être appelée dans une boucle.
Une lecture sur le flux ne supprime pas les données de la mémoire tampon, cependant, elle renvoie les données disponibles comme d'habitude.

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

En relation

Run, RunAs, StderrRead, StdinWrite, StdioClose

Exemple

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3> ; Required for _ArrayDisplay only.

; Affiche de manière récursive la liste des fichiers d'un répertoire.
Example()

Func Example()
    Local $sFilePath = @ScriptDir ; Recherche dans le répertoire du script en cours.
    Local $sFilter = "*.*" ; Recherche tous les fichiers dans le répertoire courant. Pour une liste des caractères génériques valides, recherchez 'caractères génériques' dans le fichier d'aide.

    ; Si le chemin du fichier n'est pas un répertoire alors retourne.
    If Not StringInStr(FileGetAttrib($sFilePath), "D") Then
        Return SetError(1, 0, 0)
    EndIf

    ; Enlève les antislashs arrière et ajoute une simple barre oblique inverse.
    $sFilePath = StringRegExpReplace($sFilePath, "[\\/]+\z", "") & "\"

    #cs
        Paramètres de ligne de commande pour DIR:
        /B - Simple sortie.
        /A-D - Recherche tous les fichiers moins les répertoires.
        /S - Recherche dans les sous-répertoires.
    #ce
    Local $iPID = Run(@ComSpec & ' /C DIR "' & $sFilePath & $sFilter & '" /B /A-D /S', $sFilePath, @SW_HIDE, $STDOUT_CHILD)
    ; Si vous souhaitez rechercher des fichiers contenant des caractères Unicode, alors utilisez le paramètre de ligne de commande  /U.

    ; Attend que le processus ait fermé en utilisant le PID renvoyé par Run.
    ProcessWaitClose($iPID)

    ; Lit le flux Stdout du PID renvoyé par Run. Ceci peut également être fait dans une boucle while. Regardez l'exemple de StderrRead.
    Local $sOutput = StdoutRead($iPID)

    ; Utilise StringSplit pour partager la sortie de StdoutRead en un tableau. Tous les retours chariot (@CRLF) sont supprimés et @CRLF (saut de ligne) est utilisé comme séparateur.
    Local $aArray = StringSplit(StringTrimRight(StringStripCR($sOutput), StringLen(@CRLF)), @CRLF)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "", "Il semble qu'il y ait eu une erreur en essayant de trouver tous les fichiers dans le répertoire de script courant.")
    Else
        ; Affiche les résultats.
        _ArrayDisplay($aArray)
    EndIf
EndFunc   ;==>Example