Flux STDIN/OUT ?

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

Flux STDIN/OUT ?

#1

Message par Barthandelus » jeu. 07 mars 2019 09:56

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 ?

Avatar du membre
mdanielm
Membre émérite
Membre émérite
Messages : 233
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: Flux STDIN/OUT ?

#2

Message par mdanielm » jeu. 07 mars 2019 15:23

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 3
Niveau 3
Messages : 41
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: Flux STDIN/OUT ?

#3

Message par Barthandelus » jeu. 07 mars 2019 15:33

Bonjour,

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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5858
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Flux STDIN/OUT ?

#4

Message par mikell » jeu. 07 mars 2019 15:48

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 3
Niveau 3
Messages : 41
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: Flux STDIN/OUT ?

#5

Message par Barthandelus » jeu. 07 mars 2019 15:57

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