Page 1 sur 1
[..] Attendre execution script unix
Posté : mer. 07 avr. 2010 11:24
par sacan
Bonjour,
Je viens de créer un code permettant de lancer un script unix via la console msdos en telenet :
Code : Tout sélectionner
Run("cmd.exe")
WinWaitActive("C:\WINNT\system32\cmd.exe")
Send("telnet serveur")
Send("{ENTER}")
Send("user")
Send("{ENTER}")
Sleep(2000)
Send("password")
Send("{ENTER}")
Sleep(2000)
Send("./script_unix.sh")
Send("{ENTER}")
Sleep(2000)
Send("exit")
Send("{ENTER}")
MsgBox(64, "Information", "Insertion effectué")
Ce que je souhaite c'est pouvoir attendre l'execution du script afin de pouvoir envoyer les commande d'exit.
Merci de votre aide.
Re: [..] Attendre execution script unix
Posté : mer. 07 avr. 2010 11:48
par peuchere83
Bonjour,
Tu pourrais faire en sorte que ton script unix créé un fichier texte lorsqu'il a fini son traitement.
Ainsi tu attends la présence de ce fichier avant de pouvoir continuer ton programme.
Voila pour l'idée, bon courage.
Re: [..] Attendre execution script unix
Posté : jeu. 08 avr. 2010 01:28
par jajar
Je ne sais pas si il existe une fonction pour ce genre de tache.
Mais peuchere83 à raison, tu fais une condition puis tu supprime le log.txt une fois exit terminé.
Re: [..] Attendre execution script unix
Posté : jeu. 08 avr. 2010 09:37
par GhostLine
C'est plus du coté du script Unix qu'il faut que tu regardes, je pense.
Quid de faire comme suit :
Send("./script_unix.sh&&exit")
Send("{ENTER}")
Ce qui doit faire s'exécuter les commandes les unes après les autres (voir
ici).
Après, il faut tester pour vérifier si ça marche ou pas.
Sinon, il reste effectivement la solution de créer un petit fichier de sortie à la fin de ton script .sh et d'en contrôler la présence de manière périodique.
Re: [..] Attendre execution script unix
Posté : jeu. 08 avr. 2010 12:28
par jajar
oui, mais ce qu'il cherche c'est de le coder en autoit ce serait plus pratique et il y a moins de risque d'erreur...
si il existe certaines udf qui font attendre le navigateur ie ou firefox pour que le script ce termine correctement, ca doit exister pour d'autres applications.
Re: [..] Attendre execution script unix
Posté : jeu. 08 avr. 2010 17:35
par Tlem
Eventuellement, vous pourriez utiliser StdinWrite et StdoutRead pour recevoir et envoyer les ordres à la console.
http://www.autoit.fr/autoit3/docs/funct ... nWrite.htm
http://www.autoit.fr/autoit3/docs/funct ... utRead.htm
Re: [..] Attendre execution script unix
Posté : jeu. 08 avr. 2010 20:46
par jajar
Faudrait coder une UDF pour ce type de problème, car c'est vrai que ca peut être utile.
Re: [..] Attendre execution script unix
Posté : ven. 09 avr. 2010 11:17
par sacan
Merci pour vos réponses.
Je vais y travailler la semaine prochaine car bcp de travail aujourd'hui.
Je vous tiens au courant.
Cordialement,
Re: [..] Attendre execution script unix
Posté : lun. 12 avr. 2010 14:48
par sacan
Bonjour,
Je viens d'essayer la méthode de du && comme suggéré par GhostLine, mais ça ne fonctionne pas.
Je suis donc passé par une boucle qui attend la création du fichier.
Code : Tout sélectionner
Send("./script.sh")
Send("{ENTER}")
While 1
If FileExists("terminer.txt") then ExitLoop
WEnd
Un point positif est que je vois le déroulement du script dans ma fenêtre, mais il ne veut pas sortir de la boucle.
Est-ce que ma syntaxe est correcte ?
Merci de votre aide
Re: [..] Attendre execution script unix
Posté : lun. 12 avr. 2010 15:19
par Tlem
Re: [..] Attendre execution script unix
Posté : lun. 12 avr. 2010 16:51
par sacan
J'ai lu pas mal de sujet sur ces fonctions mais elles ne pourra pa être utilisé dans mon service.
Est-ce que le while est correcte car je pense que le pb ce situe ici car le script se bloque au passage de la boucle.
Re: [..] Attendre execution script unix
Posté : lun. 12 avr. 2010 17:25
par sacan
Je viens de faire des test.
Code : Tout sélectionner
If FileExists("/**/terminer.txt") then Send("rm terminer.txt") EndIf
Code : Tout sélectionner
while 1
If FileExists("/**/terminer.txt") Then
MsgBox(64, "Information", "Fichier présent")
Else
MsgBox(64, "Information", "Fichier pas présent")
EndIf
Sleep(2000)
WEnd
J'ai essayé les deux code précedent et il ne trouve pas le fichier. Est-ce que la fonction FileExists fonctionne bien sous unix ?
Re: [..] Attendre execution script unix
Posté : lun. 12 avr. 2010 21:04
par Tlem
sacan a écrit :J'ai lu pas mal de sujet sur ces fonctions mais elles ne pourra pa être utilisé dans mon service
Ha !!!
Vous pouvez faire un script AutoIt, mais pas utiliser des fonctions internes à celui-ci.
Je comprend pas tout là ...
sacan a écrit :Est-ce que la fonction FileExists fonctionne bien sous unix ?
AutoIt = Windows donc AutoIt <> Unix.
Si vous sous entendez dans Wine, alors précisez le ...
Re: [..] Attendre execution script unix
Posté : lun. 12 avr. 2010 22:34
par GMib
Je croi qu'il parle du stdinwrite et stdinread qui déconne avec telnet, j'ai essayé de m'en servir et le process se ferme quand on lance le telnet.
j'ai peu être pas su le faire.
sinon une autre piste a explorer : utiliser un autre logiciel pour telnet : putty
il est utilisable en ligne de commande.
http://marc.terrier.free.fr/docputty/Ch ... ng-cmdline
Re: [..] Attendre execution script unix
Posté : lun. 12 avr. 2010 23:42
par Tlem
Et pourquoi ne pas utiliser les fonctions interne à AutoIt ?
► Afficher le texte
Code : Tout sélectionner
$Login = "admin"
$Passwd = "MotdePasse"
$Prompt = "Busybox xx.xx>"
; Connexion au serveur par TCP sur port 23 (Telnet) et attente message de login.
TCPStartUp()
$socket = TCPConnect("192.168.1.1", 23)
_WaitRecvMsg("login")
; Envois du login et attente password.
TCPSend($socket, $Login & @CRLF)
_WaitRecvMsg("password")
; Envoi du password et attente du prompt
TCPSend($socket, $Passwd & @CRLF)
_WaitRecvMsg($Prompt)
ConsoleWrite("Login terminé" & @CRLF)
; Envoi de la commande CD .. et attente du prompt
TCPSend($socket, "cd .." & @CRLF)
_WaitRecvMsg($Prompt)
; Envoi de la commande CD .. et attente du prompt
TCPSend($socket, "cd .." & @CRLF)
_WaitRecvMsg($Prompt)
; Envoi de la commande ls et attente du prompt tout en affichant le message de retour.
TCPSend($socket, "ls" & @CRLF)
MsgBox(0, "Réponse du Serveur :", _WaitRecvMsg($Prompt))
TCPCloseSocket($socket)
TCPShutDown()
Func _WaitRecvMsg($szMsg)
Local $Begin = TimerInit()
While 1
Local $SrvMes = TCPRecv($socket, 1024)
If StringInStr($SrvMes, $szMsg) Then Return $SrvMes
If TimerDiff($begin) > 5000 Then
SetError(1)
Return 0
EndIf
WEnd
EndFunc
C'est un code écrit rapidement, il demande à être amélioré en fonction des besoins. Selon le type de données à récupérer je pense que cela devrait faire l'affaire.
*** Attention toutefois aux caractères renvoyés ? car en Telnet sur un Linux, certains ne sont pas standard pour Windows ...
Donc il faut interpréter.

Mais d'après ce que sacan a écrit dans son premier message, AMHA cela devrait très largement suffire sans se prendre la tête ...

Re: [..] Attendre execution script unix
Posté : mar. 13 avr. 2010 10:29
par sacan
Bonjour,
Merci pour votre script. Je viens de lancer en modifiant les variables pour que cela corresponde à mon besoin. Le problème c'est que rien ne se passe et rien n'apparait. Je suis sous win 2000, est-ce qu'il faut que je mettre à jour qq chose, car visiblement il n'y a aucune action en utilisant la commande TCPStartUp().
Cdlt,
Re: [..] Attendre execution script unix
Posté : mar. 13 avr. 2010 18:11
par Tlem
Quelle version de AutoIt utilisez-vous ?
Re: [..] Attendre execution script unix
Posté : mer. 14 avr. 2010 14:59
par sacan
La version v3.3.4.0.
Normalement ca devrait fonctionner...
Re: [..] Attendre execution script unix
Posté : mer. 14 avr. 2010 19:43
par Tlem
Je viens de tester le script sur un Windows 2000 Pro dans un machine virtuelle et tout fonctionne.
Sans doute vous manque t-il un paramètre (l'IP peut être) ?
Dans tous les cas le test du script est concluant sur un Windows 2000 avec AutoIt version 3.3.6.0.
A vous de voir d'où vient le problème.