[R] Fonction Run : récupérer variable en retour de ligne de

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
yannbis
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 15 sept. 2014 16:19
Status : Hors ligne

[R] Fonction Run : récupérer variable en retour de ligne de

#1

Message par yannbis »

Bonjour,
utilisateur occasionnel d'AutoIt, je souhaité développer une petite application de lecture de QRCode.
je m'appuie pour cela sur l'outil Zbar (http://zbar.sourceforge.net/)
Zbar est utilisable en ligne de commande : en lui fournissant le chemin d'accès d'une image, il retourne la chaine de caractère lue dans le QRCode figurant sur l'image. Cela fonctionne très bien.

En revanche, je n'arrive pas à intégrer cet appel à Zbar dans AutoIt. J'ai déjà utilisé auparavant la fonction Run avec d'autres outils en ligne de commande, mais cette fois je suis bloqué.
Impossible de récupérer la valeur retournée par Zbar comme une variable dans AutoIT.

J'ai essayé de simplifier au maximum la fonction et les erreurs possibles en rassemblant mon script et zbar dans le même dossier.

Je souhaite via AutoIt:
Appeler Zbar avec en paramètre un chemin d'accès "en dur" vers une image contenant un QRCode
Récupérer le résulatt renvoyé par Zbar pour l'afficher dans une fenetre AutoIt

Voici donc le code sur lequel je bute :

Code : Tout sélectionner

$iPID = Run(@ComSpec & "zbarimg -d barcode.jpg", @ScriptDir, @SW_HIDE, 2)
ProcessWaitClose($iPID)
$sQRText = StdoutRead($iPID)
MsgBox(0,"ZBarImg Result", $sQRText)
 

Code : Tout sélectionner

>"D:\Logiciels\LiberKey\MyApps\autoit-v3\SciTe\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "D:\Logiciels\LiberKey\MyApps\autoit-v3\Examples\QR\zbar_simple.au3" /UserParams    
+>17:33:42 Starting AutoIt3Wrapper v.2.1.4.4 SciTE v.3.3.6.0 ;  Keyboard:0000040C  OS:WIN_7/Service Pack 1  CPU:X64 OS:X86    Environment(Language:040C  Keyboard:0000040C  OS:WIN_7/Service Pack 1  CPU:X64 OS:X86)
>Running AU3Check (3.3.10.2)  from:D:\Logiciels\LiberKey\MyApps\autoit-v3
+>17:33:43 AU3Check ended.rc:0
>Running:(3.3.10.2):D:\Logiciels\LiberKey\MyApps\autoit-v3\autoit3.exe "D:\Logiciels\LiberKey\MyApps\autoit-v3\Examples\QR\zbar_simple.au3"    
--> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
+>17:33:45 AutoIt3.exe ended.rc:0
+>17:33:45 AutoIt3Wrapper Finished..
>Exit code: 0    Time: 3.535
Ce code s’exécute avec zbarimg.exe ainsi que l'image barcode.jpg dans le même répertoire (soit par exemple avec l'installation par défaut : C:/Program Files/Zbar/bin).

Le problème est que je je ne récupère pas la variable renvoyée par la ligne de commande. Alors qu'n ligne de commande ça fonctionne très bien.


Merci d'avance pour votre aide.
Y
Modifié en dernier par yannbis le mar. 14 oct. 2014 13:54, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#2

Message par orax »

Ce truc va forcément retourné une erreur puisque ça va exécuter quelque chose comme : cmd.exezbarimg -d barcode.jpg. Il manquait un espace après @ComSpec. De plus, @ComSpec n'est pas nécessaire dans ce cas ; il l'est si on veut exécuter des commandes internes de l'interpréteur cmd.exe comme "dir".

Il serait aussi préférable d'utiliser $STDOUT_CHILD au lieu de 2. Ça ne changera rien au fonctionnement du script, c'est juste pour plus de clarté puisque "2" est peut explicite. Il faudra ajouter #include <AutoItConstants.au3> au début du script.

C'est mieux avec ça ?

Code : Tout sélectionner

$iPID = Run("zbarimg -d barcode.jpg", @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#3

Message par pierrotm777 »

Peut être remplacer @ScriptDir par @ScriptDir\ ???
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#4

Message par mikell »

Gaaaah ! pierrot ! :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
yannbis
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 15 sept. 2014 16:19
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#5

Message par yannbis »

orax a écrit : C'est mieux avec ça ?

Code : Tout sélectionner

$iPID = Run("zbarimg -d barcode.jpg", @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
Merci pour cette réponse. Malheureusement, non ce n'est pas maieux!
En recherchant par rapport à l'erreur renvoyée (/run /prod /ErrorStdOut ) je vois qu'il y a parfois des problèmes entre ls version 32 et 64. En plus, j'utilise AutoIt Portable, c'est peut être une piste...Je vais chercher.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#6

Message par walkson »

Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yannbis
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 15 sept. 2014 16:19
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#7

Message par yannbis »

Merci Walkson, ça fonctionne très bien.
je dois dire que je n'avais pas ouvert les réponses en russe de Google!

Je passe en résolu...même si je ne sais pas pourquoi ça ne fonctionnait pas!
Je posterai le résultat de ma petite appli plus tard.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#8

Message par jguinch »

Certains programmes redirigent leur sortie vers le flux de sortie "standard" et d'autres vers le flux "d'erreur".
Ici, on a un programme qui redirige vers le flux d'erreur.
Pour le savoir, il suffit de faire le test en ligne de commande : http://www.robvanderwoude.com/battech_redirection.php

Tu peux faire le test avec les commandes suivantes, pour voir ce que ça change :
- dir azertypoiuy
- dir azertypoiuy > nul
- dir azertypoiuy 2> nul
- dir azertypoiuy > nul 2> nul
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Fonction Run : récupérer variable en retour de ligne

#9

Message par walkson »

Deux petits conseils (si ça peut être utile):
Ne pas oubliez les espaces avant (et après selon) une variable comme ici:
$Path & ' "' & $QR & '"'
et si le chemin contient un espace comme C:\Mes documents\ de le mettre en "C:\Mes documents\"
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
silmaril92
Niveau 1
Niveau 1
Messages : 5
Enregistré le : lun. 18 févr. 2013 11:49
Status : Hors ligne

Re: [R] Fonction Run : récupérer variable en retour de ligne

#10

Message par silmaril92 »

j ai le même problème ..

j'ai écrit un programme nommé test qui renvoie une chaine de caractère de blabla.

si je l exécute en ligne de commande cela fonctionne très bien:

c:\>test.exe
blabla
c:\>

Ensuite j'ai un second programme test2.au3 (je passe les déclarations...)

$id_test = RunWait ("test.exe", @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
$s_out = StdoutRead ( $id_test )
Msgbox (0,"RESULT", $s_out)


Et mon msgbox affiche un vide.
Comment as tu réglé ton problème ???
yannbis
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 15 sept. 2014 16:19
Status : Hors ligne

Re: [R] Fonction Run : récupérer variable en retour de ligne

#11

Message par yannbis »

silmaril92 a écrit : Comment as tu réglé ton problème ???
Désolé, pour ma part j'ai trouvé un bout de script qui fonctionne, mais je ne sais pas pouquoi l'autre ne fonctionnait pas...
silmaril92
Niveau 1
Niveau 1
Messages : 5
Enregistré le : lun. 18 févr. 2013 11:49
Status : Hors ligne

Re: [R] Fonction Run : récupérer variable en retour de ligne

#12

Message par silmaril92 »

ok c'est indiscret de demander le lien de ton bout de script ou bien le bout de script :)
yannbis
Niveau 1
Niveau 1
Messages : 7
Enregistré le : lun. 15 sept. 2014 16:19
Status : Hors ligne

Re: [R] Fonction Run : récupérer variable en retour de ligne

#13

Message par yannbis »

silmaril92 a écrit :ok c'est indiscret de demander le lien de ton bout de script ou bien le bout de script :)
juste au dessus...c'est en russe
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Fonction Run : récupérer variable en retour de lign

#14

Message par orax »

Dans le cas de yannbis, ça ne marchait pas puisque le programme écrivait dans le flux des erreurs (STDERR) et le script ne lisait pas ce flux. Voir le message de jguinch, plus haut : http://www.autoitscript.fr/forum/viewto ... 238#p90238
Pour silmaril92, StdoutRead() attend le PID du processus, comme 1er argument. Or, RunWait() renvoie le code d'erreur de fin du processus, au lieu du PID. Il faut donc remplacer RunWait par Run. Voir les exemples de StdoutRead et StderrRead.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Répondre