[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 : 342
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 »

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