[Ex] Inactivité d'une commande MS-DOS (timeout)

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 341
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

[Ex] Inactivité d'une commande MS-DOS (timeout)

#1

Message par GhostLine » mer. 17 févr. 2016 15:10

Salut à tous ! Ca faisait une paye que je n'avais pas partagé quelque chose ici : c'est le moment de me rattraper :)

Problématique de départ : pour la mise à jour d'un automate, nous lançons une commande MS-DOS (qui déclenche un programme en Java, mais peu importe). Si le batch ne contient pas la valeur correcte du port COM sur lequel est connecté l'automate, la commande MS-DOS reste figée sur un message, sans se fermer d'elle-même.

Solution : scruter le STDOUT de la fenêtre afin de déterminer si oui ou non, il y a des changement dans cette dernière.

#include <Constants.au3>
#include <File.au3>

$timeout = 5 ; Nombre de secondes sans modifications de la sortie texte de la commande MSDOS avant fermeture
$foo = Run(@ComSpec & " /c D:\iCASH-Loader\iCASH10FO-getVersion.bat", @SystemDir, @SW_SHOW, $STDERR_CHILD + $STDOUT_CHILD)

_TimeOut($foo, $timeout)

Func _TimeOut($programme, $duree)
        $line_alt = "Coin !"
        $compteur = 0
        $logfile = "c:\temp\log.txt"
        _FileWriteLog($logfile, "Lancement du batch ...")
        FileWrite($logfile, @CRLF & "************************** SORTIE CONSOLE ****************************" & @CRLF & @CRLF)
        While 1
                $line = StdoutRead($programme)
                FileWrite($logfile, $line)
                If @error Then ExitLoop
                If $line_alt = $line Then
                        Sleep(1000)
                        $compteur = $compteur + 1
                Else
                        $compteur = 0
                EndIf
                If $compteur = $duree Then
                        ProcessClose($programme)
                        FileWrite($logfile, @CRLF & @CRLF & "**************************** FIN SORTIE ******************************" & @CRLF & @CRLF)
                        _FileWriteLog($logfile, "Timeout => exit !")
                        ExitLoop
                EndIf
                $line_alt = $line
        WEnd
EndFunc   ;==>_TimeOut
Modifié en dernier par orax le mer. 17 févr. 2016 15:22, modifié 1 fois.
Raison : Ajoute coloration syntaxique

Répondre