Page 1 sur 1

Flux STDIN/OUT ?

Posté : jeu. 07 mars 2019 09:56
par Barthandelus
Bonjour,

Dans le but d'effectuer un analyseur réseau je souhaiterais utiliser la commande native Run() d'AutoIT pour exécuter une commande Batch. Cependant, je ne sais pas du tout comment récupérer le retour de la commande (exemple : un simple ping). J'ai l'impression que c'est en rapport avec les STDIN/OUT. Est-ce possible ?

Sachant que c'est un analyseur réseau, je préfère utiliser Run() plutôt que RunWait(), est-ce que ça ne va pas poser problème ?

Re: Flux STDIN/OUT ?

Posté : jeu. 07 mars 2019 15:23
par mdanielm
Bonjour,
Il y a des exemples dans la documentation, en voici un perso:
#include <WinAPIConv.au3>
#include <AutoItConstants.au3>

Global $iPID, $sOEM, $sANSI, $sMsg
; Commande Dir sur le fichier du script
$iPID = Run(@ComSpec & " /c dir "& @ScriptFullPath, "", @SW_HIDE, $STDOUT_CHILD)
; Attend la fin du processus
ProcessWaitClose($iPID)
; Récupère le résultat de la commande Dir dans la variable $sOEM
$sOEM = StdoutRead($iPID)
; Convertit en ANSI
$sANSI =  _WinAPI_OemToChar($sOEM)
; Affiche les deux codages
$sMsg = "Version OEM:--------------" & @crlf & $sOEM & @crlf
$sMsg &= "Version ANSI:--------------" & @crlf & $sANSI

MsgBox(0,"_WINApi_OEMToChar", $sMsg)  

Re: Flux STDIN/OUT ?

Posté : jeu. 07 mars 2019 15:33
par Barthandelus
Bonjour,

Ok, je comprends. Quel différence cependant entre l'usage de Run() + ProcessWaitClose() et RunWait() ?

Re: Flux STDIN/OUT ?

Posté : jeu. 07 mars 2019 15:48
par mikell
Si tu souhaites récupérer un flux Stdout en continu, ça serait plutôt ça

$Stdout = ""
Local $PID = Run(...)

While 1
    $Stdout &= StdoutRead($PID)
    If @error Then ExitLoop  ; fin du processus
WEnd

Re: Flux STDIN/OUT ?

Posté : jeu. 07 mars 2019 15:57
par Barthandelus
Je vois le genre.

Cependant, mon programme fonctionne avec WINPCAP, ce qui veut dire qu'il peut détecter x IP la même seconde, et donc va créer en conséquent x $PID pour sous-traiter les réponses des différentes IP.

Est-ce que ça fonctionnerait aussi comme ça en prenant en compte cette configuration ?
Sinon, n'existerait-il pas des Handlers en AI3 qui permettrait de balancer une fonction dès qu'un retour d'un x PID child est reçu par mon application mère ?