Functions > Process >


StdinWrite

Ecrit un nombre de caractères dans le flux STDIN d'un processus enfant lancé au préalable.

StdinWrite ( process_id [, data] )

Paramètres

process_id L'ID du processus enfant, tel que retourné par un appel précédent à Run.
data [optionnel] Les données que vous voulez écrire, du texte ou du binaire.

Valeur de retour

Succès: Retourne le nombre de caractères écrits.
Échec: Définit @error <> 0 si STDIN n'a pas été redirigé vers le processus ou autre erreur.

Remarques

StdinWrite() écrit dans le flux d'entée standard de la console pour un processus enfant, qui est normalement utilisé par les applications console pour lire des entrées de l'utilisateur, par exemple le clavier. Pendant l'appel de Run() pour le processus enfant, pour écrire dans le STD I/O, le paramètre doit avoir inclus la valeur $STDIN_CHILD (1) pour que cette fonction travaille correctement (voir la fonction Run()).

Le second paramètre optionnel est la chaîne que vous souhaitez écrire dans le flux. Si la fonction est appelée sans le second paramètre, StdinWrite() ferme le flux et l'invalide pour l'écriture.

Le flux est un buffer 'first-in/first-out', premier entré premier sorti, avec une taille limitée arbitraire; si, à un moment où cette fonction est appelée (sauf si elle est appelée à fermer le flux) il n'y a pas de place pour plus de caractères à écrire dans le flux, la fonction StdinWrite() permet de bloquer (pause) et de ne pas retourner jusqu'à ce que le processus enfant ferme le flux ou lit assez de caractères dans le flux pour permettre à la procédure d'écriture de terminer. Cela signifie que le processus AutoIt sera arrêté, et il n'y aura pas de traitement de raccourcis clavier, ni des messages de la GUI, etc... jusqu'à ce que le processus enfant lise le flux STDIN.

Les caractères sont convertis à la norme ANSI avant d'être écrits.

Les données binaires sont écrites en l'état. Elles ne seront pas converties en une chaîne. Pour visualiser la représentation hexadécimale de données binaires, utilisez la fonction String() pour convertir explicitement les données en chaîne.

En relation

Run, RunAs, StderrRead, StdioClose, StdoutRead

Exemple

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

Example()

Func Example()
    Local $iPID = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

    ; Ecrit une chaîne de mots à trier dans le Stdin de sort.exe enfant
    StdinWrite($iPID, "Banana" & @CRLF & "Elephant" & @CRLF & "Apple" & @CRLF & "Deer" & @CRLF & "Car" & @CRLF)

    ; Appel de StdinWrite sans second paramètre ferme le flux.
    StdinWrite($iPID)

    ; Stocke la sortie de StdoutRead dans une variable.
    Local $sOutput = StdoutRead($iPID)

    While @error = 0
        ; Lit le flux Stdout du PID renvoyé par Run.
        $sOutput &= StdoutRead($iPID)
    WEnd

    MsgBox($MB_SYSTEMMODAL, "", "La chaîne triée est: " & @CRLF & $sOutput)
EndFunc   ;==>Example