[R] Connaître le Return d'un executable

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

[R] Connaître le Return d'un executable

#1

Message par caropost »

Bonjour,

On m'a demandé de rédiger 2 scripts avec Script1 qui fait appel à des fonctions dans Script2 qui n'ont pour seul but que de renvoyer une variable à Script1.
► Afficher le texteScript1.au3
► Afficher le texteScript2.au3
Je ne vous ai pas tout mis mais le reste n'est pas important pour mon problème.

Ceci fonctionne mais là où ça se complique c'est lorsque je souhaite compiler les 2 scripts (demande forte)... Pour faire ce que je souhaite, j'ai dû changer les "Return $nom" en "Send($nom)" et on m'a demandé de voir si je ne pouvais pas garder les Return de mes fonctions... Le truc est que je ne vois pas trop comment faire et si c'est possible...
De plus, pour pouvoir récupérer le nom (comme j'enregistre le fichier avec cette variable et que j'ai besoin de la connaître pour attendre que le processus soit prêt), je copie la variable dans un presse-papier à l'aide de ClipGet et ClipPut mais il doit y avoir plus "propre" comme façon de faire...

Merci par avance pour votre aide :)
Modifié en dernier par caropost le ven. 17 juil. 2015 14:49, modifié 1 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#2

Message par jchd »

Voir l'aide sur Exit.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#3

Message par orax »

D'après ce que j'ai compris elle cherche plutôt à obtenir une chaîne de caractères (pas seulement un code numérique).
Les fonctions Std* (StdoutRead...) pourraient convenir pour cette tâche, mais il y a d'autres façons de faire (voir communication inter-processus, IPC).
Est-ce que Script2.exe sera toujours exécuté sur le même PC que Script1 ? Car il serait possible d'interroger Script2 à distance (via le réseau) si cela fait partie des contraintes.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#4

Message par jchd »

Ah, si caro veut passer autre chose qu'un code de sortie d'exécutable forcément numérique [ce qui est pourtant le titre de ce fil] alors, en effet, le plus robuste serait d'utiliser un IPC, genre mailslot.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#5

Message par caropost »

Mon titre est peut-être mal choisi et je me suis peut-être mal exprimé, je suis désolée :oops:

Mais l'idée est que j'ai $nom qui est défini dans Script2 et que je le retourne à Script1 à l'aide d'une petite fonction qui ne contient que "return $nom". De cette façon, je peux, avant compilation, attendre que "Dupond_presonne.txt" soit actif et de fermer ce fichier sans avoir une variable dans Script1 qui récupère ce nom. Ce n'est donc pas un numéro que j'attends.
Mon return fonctionne très bien avant compilation mais plus après compilation...
Et donc je cherche à savoir si je peux garder ma fonction avec un Return ou si je dois complètement la changer. J'ai transformé mon "return" en "send" mais ça ne plait qu'à moitié...

Je regarde les IPC mais de ce que j'en ai lu pour l'instant, ainsi que les quelques lignes de code, j'ai sorti les rames... :oops:
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#6

Message par jchd »

Ce que je n'ai pas trop compris c'est pourquoi tu tiens à avoir deux scripts. Tu dis que l'un est essentiellement stable et figé, tandis que l'autre sera modifié régulièrement. Si c'est pour y loger des informations variables dans le temps, type infos de connexion (par exemple), pourquoi ne pas les stocker dans un conteneur commun à accès limité par droit ou chiffrement ?

En bref, à quoi sert script2 et pourquoi le recompiler sans cesse ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#7

Message par caropost »

Pour des raisons de confidentialité je ne vais pas trop pouvoir répondre à tes questions...

C'est une contrainte forte de mon tuteur d'avoir, non seulement 2 scripts mais en plus de les compiler tous les 2. Si ça ne tenais qu'à moi, j'aurais tout mis dans le même script...
Script1 est suffisamment générique pour pour ne pas y toucher tandis que Script2 s'adapte en fonction de ce qu'on veut faire. Les fonctions contenant un return ne sont pas censé changer, juste le contenu des variables. Le nom MyFunction n'est pas censé bouger mais son contenu change. Script2 ne peut pas fonctionner sans Script1.
Dans mes différents posts, tu as peut-être remarqué que je vous donnais des exemples de code avec des fleurs. Bah image que aujourd'hui MyFunction sert à répertorier des fleurs mais demain on devra pouvoir adapter son contenu pour qu'il répertorie des arbres, des voitures ou encore des téléphones sans avoir à modifier Script1...

Mon tuteur m'a demandé de compilé les 2 scripts pour qu'il n'y ai pas de mauvaise manipulation par erreur (au pire le fichier est supprimé) et pour pouvoir les donner à quelqu'un qui n'a pas AutoIt d'installé sur un PC.
A quoi penses-tu pour le conteneur ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#8

Message par Tlem »

Bonjour.
Si le script 2 n'a pas besoin d'interface graphique (d'après ce que j'ai compris, il est là uniquement pour retourner des valeurs) alors il peut être intéressent de le compiler en CUI, comme ça les valeurs seront retournées dans la console. ^^

Il suffira à script 1 de lire le retour console (StdoutRead...) pour avoir la/les valeurs de retour.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#9

Message par caropost »

Tlem a écrit :Bonjour.
Si le script 2 n'a pas besoin d'interface graphique (d'après ce que j'ai compris, il est là uniquement pour retourner des valeurs) alors il peut être intéressent de le compiler en CUI, comme ça les valeurs seront retournées dans la console. ^^

Il suffira à script 1 de lire le retour console (StdoutRead...) pour avoir la/les valeurs de retour.
Il ne fait pas que ça mais en partie. La plus grosse partie se trouve dans MyFunction qui fonctionne bien (mis à part mon problème d'écriture des logs dans un fichier texte) mais ne retourne rien.
Comment fait-on pour compiler en CUI ? Je n'ai que "Compiler" lorsque je fais un clique droit pour compiler...
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#10

Message par jguinch »

@Thierry : sauf erreur de ma part, il n'y a pas forcément besoin de compiler en CUI pour utiliser ConsoleWrite :?

Caro a écrit :2 scripts avec Script1 qui fait appel à des fonctions dans Script2
Caro, je ne comprends pas trop : comment ton script1 peut-il appeler des fonctions dans le script2 ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#11

Message par mikell »

$CmdLine ne marcherait pas ici ?
► Afficher le textescript1.au3
► Afficher le textescript2
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#12

Message par caropost »

jguinch a écrit :@Thierry : sauf erreur de ma part, il n'y a pas forcément besoin de compiler en CUI pour utiliser ConsoleWrite :?

Caro a écrit :2 scripts avec Script1 qui fait appel à des fonctions dans Script2
Caro, je ne comprends pas trop : comment ton script1 peut-il appeler des fonctions dans le script2 ?
Avec un ShellExecuteWait...

Afin que vous compreniez mieux ce que j'essaie de faire, je ne vous donne pas tout le code mais en partie. Comme ça, ça sera un peu plus concret...
► Afficher le texteScript1.exe
► Afficher le texteScript2.exe
► Afficher le textePlinkWrapper.au3
Je me doute bien que des fois je dois me compliquer la vie pour rien mais ça ressemble beaucoup à ce qui m'a été demandé...

Le but de ce post était de savoir comment Script1 peut, plus proprement, récupérer les valeur de $nom, $version sachant que le souhait de mon tuteur était d'avoir des fonctions qui ne contiennent que le return...

J'ai essayé :
Script1.exe

Code : Tout sélectionner

Send("NOM DU SCRIPT : ")
Sleep(500)
StringReplace($CmdLine[1], "Script2", @crlf)
Script2.exe

Code : Tout sélectionner

ShellExecute(@ScriptDir & '\Script2.au3', $nom)
mais ça me fait n'importe quoi...
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#13

Message par orax »

► Afficher le texteScript2.exe
Je peux ensuite tester ce script depuis l'invite de commandes (cmd.exe) mais la ligne #AutoIt3Wrapper_Change2CUI=y (pour compiler en CUI) semble être nécessaire dans ce cas, sinon il n'y a rien qui s'affiche dans cmd.exe.

Code : Tout sélectionner

C:\autoit>Script2.exe version
V1
C:\autoit>Script2.exe nom
Script2
► Afficher le texteScript1.exe
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#14

Message par Tlem »

jguinch a écrit :@Thierry : sauf erreur de ma part, il n'y a pas forcément besoin de compiler en CUI pour utiliser ConsoleWrite :?
Ben si tu veux exploiter les retours en mode console, il n'y a pas le choix ...

Maintenant, il est clair que la lecture du flux directement depuis un exe compilé de manière classique est une solution, mais pas facile de tester les fonctions en live une fois compilé (ou alors il faut rajouter un mode Debug qui affichera les résultats dans une boite de dialogue.

Ce sera toujours mieux que les Send utilisés par caropost. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#15

Message par caropost »

Merci pour vos réponses :)

Effectivement Orax, ça fonctionne pas trop mal :) J'ai tout de même un petit soucis...
J'ai un PC avec une version de XP assez ancienne et je pense qu'à cause de cela, je n'ai pas "Compile with options" lorsque je fais un clique droit sur le script. Je compilais normalement Script2 avec les 3 premières lignes qu'Orax a ajouté (#Region etc) mais en testant en ligne de commande ça ne fonctionnait pas (je n'avais pas le nom du script qui s'affichait dans cmd.exe). En cherchant un peu sur internet, j'ai vu qu'on pouvait compiler avec des options et en trouvant un PC avec un XP un peu plus récent (je ne sais pas si ça a à voir avec mon problème), j'ai pu compiler Script2 avec l'option CUI et fais un test en lignes de commande : ça fonctionne. Je modifie un peu Script1 pour qu'il écrive sur le bloc note ce que je souhaite (en remplaçant ConsoleWrite par Send), reviens sur le 1er PC et ça ne fonctionne pas...

Après plusieurs essais, j'ai trouvé d'où vient le problème, je ne sais pas comment le résoudre et ça m'embête...
Au début de Script1, je demande à l'utilisateur de choisir un répertoire que je stock dans la variable $repertoire (Bureau\File). Dans celui-ci doit se trouver Script2.exe (contrainte forte de mon tuteur). J'ai donc modifié le Run pour qu'il aille chercher Script2.exe dans $repertoire.

Code : Tout sélectionner

Local $pid = Run("Script2.exe nom", $repertoire, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Le problème est qu'il ne trouve pas Script2.exe... Lorsque je copie Script2.exe dans le même dossier que Script1.exe (sur le bureau) en gardant $repertoire au lieu de @ScriptDir, ça fonctionne... Et comme je disais, cela m'embête parce que Script2 n'est pas censé se trouver dans le même répertoire que Script1 :/

EDIT : J'ai fais autrement et ça fonctionne...

Code : Tout sélectionner

Local $pid = Run($repertoire & "\Script2.exe nom", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
EDIT 2 : J'anticipe un peu : s'il me dit que ça ne lui va toujours pas, est-ce qu'il y a une autre solution ?
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Connaître le Return d'un executable

#16

Message par caropost »

Ca convient, merci pour votre aide :)
Répondre