Flux STDIN/OUT ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Flux STDIN/OUT ?

#1

Message 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 ?
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: Flux STDIN/OUT ?

#2

Message 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)  
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: Flux STDIN/OUT ?

#3

Message par Barthandelus »

Bonjour,

Ok, je comprends. Quel différence cependant entre l'usage de Run() + ProcessWaitClose() et RunWait() ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Flux STDIN/OUT ?

#4

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: Flux STDIN/OUT ?

#5

Message 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 ?
Répondre