Page 1 sur 1

[R] Communication "à-la-DOS" entre scripts non compilés

Posté : ven. 11 juin 2010 16:01
par ZDS
Bonjour !

Je souhaite savoir si quelqu'un a déjà réussi à faire en sorte que deux scripts non compilés (c'est indispensable pour moi) puisse "dialoguer" à la manière d'une commande DOS.

Je m'explique :
1 - Je souhaite dans un script "Serveur.au3" écrire sur la sortie standard ou autre, de façon à pouvoir l'exécuter comme une commande ipconfig ou dir. Ca, je pensais avoir trouvé : ConsoleWrite("Hello!")
Malheureusement ça ne fonctionne que si on le compile en mode console.

Code : Tout sélectionner

C:\TestConsole>"C:\Program Files\AutoIt3\AutoIt3.exe" "C:\TestConsole\Serveur.au3"

C:\TestConsole>"C:\TestConsole\Serveur.exe"
Hello!
C:\TestConsole>
Pas du tout pratique dans mon cas donc. Ce que j'aimerai donc c'est :

Code : Tout sélectionner

C:\TestConsole>"C:\Program Files\AutoIt3\AutoIt3.exe" "C:\TestConsole\Serveur.au3"
Hello!
C:\TestConsole>
sans avoir à faire un compilation.

2 - Une fois le script Serveur.au3 opérationnel, je souhaite y faire appel et accéder à son message "Hello!" depuis un script "Client.au3", mais entre les Run, Execute, Shell pour lancer; et les StdIn/Out ou console (Read/Write) je m'y perds :s dans certains cas il faut le PID du process de départ, dans d'autres cas celui du processus d'arrivée... bref ^^

Merci d'avance, et n'hésitez pas à me demander des détails si je me suis mal exprimé ^^

A bientôt !

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : ven. 11 juin 2010 16:38
par Tlem
Pour envoyer des informations en sortie 'comme MS-DOS' il vous faut impérativement une application console.
Donc le mode 'comme MS-DOS' ne peut pas s'appliquer dans votre cas.

Ensuite, pour la communication entre deux scripts/programmes, le sujet a déjà été abordé sur le forum.

Voici un récapitulatif des possibilités :
- Par l'échange d'information en mémoire.
- Par inscription dans un fichier temporaire ou base de registre.
- ou par envois des informations en tant qu'arguments.

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : ven. 11 juin 2010 20:58
par matwachich
Ou encore, et je pense que c'est le must!!! en TCP en localhost (avec bien sur l'UDF TCP.au3 - cherchez sur le forum anglais -)

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : ven. 11 juin 2010 21:22
par Tlem
Ha oui c'est vrais. On en avait aussi parlé !!!
Je l'avais déjà oublié. :roll:

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : ven. 11 juin 2010 23:57
par ZDS
Bonsoir !

Pour ce qui est des propositions, j'aimerai avoir plus de détails dessus. Auriez vous des scripts d'exemple sous la main?
- info en mémoire, je ne vois pas de quoi il s'agit ^^
- fichier temp ou bdr, j'aimerai éviter autant que possible.
- info par argument, je vois, mais pas dans le sens voulu, Dans mon cas, A(client) appelle/lance B(serveur) mais c'est B qui doit rendre de l'information.
- par tcp, c'est un choix qui m'est impossible, les communications même en boucle locale sont loguées sur les ordis de mon boulot (outils de test/validation).

Merci d'avance, et à plus tard !

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : sam. 12 juin 2010 00:19
par Tlem
Par arguments, c'est possible même dans ce sens, mais la gestion du script risque d'être plus que tendue ... :roll:
Pour l'échange mémoire, je vous laisse cherché sur le forum, mais perso je ne trouvais pas cette solution très simple à mettre en œuvre.
TCP/IP pas possible ... Ok

Donc même si vous voulez éviter, il ne reste plus grand chose en dehors de l'échange par fichier temporaire ou par la base de registre.
Je ne vois d’ailleurs pas en quoi cette méthode vous gène, car elle est très largement utilisée par bon nombre d'application et utilitaire.
De plus, d'après ce que vous dites, vos scripts ne seront pas compilés. Donc, vous n'avez pas de secrets. :wink:

Après, l'ultime solution, c'est la compilation du script ... :mrgreen:

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : sam. 12 juin 2010 00:33
par timmalos
Ceci marche chez moi :


Programme Serveur

Code : Tout sélectionner

#include <WinAPI.au3>
_WinAPI_AttachConsole(-1) ; S'attache à la console du client (Programme parent)
;_WinAPI_WriteConsole()
ConsoleWrite("Ceci est un message du serveur")
Programme Client

Code : Tout sélectionner

#include <Constants.au3>

Local $foo = Run('"c:\Program Files\AutoIt3\AutoIt3.exe" "c:\Users\tim\Documents\serveur.au3"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

; Read from child's STDOUT and show
Local $data
While True
    $data &= StdoutRead($foo)
    If @error Then ExitLoop
    Sleep(25)
WEnd
MsgBox(0, "Debug", $data)
 

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : sam. 12 juin 2010 10:59
par Tlem
Whouaaa, je ne connaissait même pas ce _WinAPI_AttachConsole ... :shock:

Comme de quoi, il y a presque toujours une solution pour tout avec AutoIt. :lol:

Re: [..] Communication "à-la-DOS" entre scripts non compilés

Posté : sam. 12 juin 2010 14:34
par ZDS
Franchement, je commençais à desespérer, et ton script, Timmalos... Ce qui est génial c'est que si on le compile ça marche quand même :)
Alors là, les gars, vous êtes des stars ! Merci beaucoup ! :D