[R] Errorlevel d'une commande externe

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

[R] Errorlevel d'une commande externe

#1

Message par Laddy »

Bonjour à tous,

J'ai parcouru le forum surement mal car je n'ai pas trouvé d'exemples pour mon interrogation. Le tutoriel sur Run n'en fait pas mention.

Je suis entrain de me pencher sur la conversion de mon programme autohotkey vers autoit.

Comment gérer les errorlevel d'une commande exécuté par Run.

En autohotkey, il y avait UseErrorLevel qui me permettait de récupérer l'erreur de ma commande externe
et en autoit est il possible de faire de même ??

En autohotkey

Code : Tout sélectionner

RunWait,%comspec% /c RMPARTUSB.exe USB list >>FILE.TXT,UseErrorLevel ,HIDE
if errorlevel = 3
{
msgbox %NOFOUNDUSB%
MergedLine= "NO USB" ;variable attribue
}
En autoit :

Code : Tout sélectionner

$ListUSB = "File.txt" 
Run(@ComSpec & " /c RMPARTUSB.exe USB list > " & $ListUSB, "", @SW_HIDE)
#CS
Comment gérer mon errorlevel 3 ?
#CE
 
Merci d'avance pour vos réponses

Bonne fin d'apres midi.

Laddy
Modifié en dernier par Laddy le jeu. 04 nov. 2010 16:30, modifié 1 fois.
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#2

Message par alex1205 »

Prem's
error level = @error
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#3

Message par Laddy »

Mdr
Bonjour alex1205
pourrais tu être plus précis je l'ajoute où ?
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#4

Message par alex1205 »

Voilà :

Code : Tout sélectionner

$ListUSB = "File.txt" 
RunWait(@ComSpec & " /c RMPARTUSB.exe USB list > " & $ListUSB, "", @SW_HIDE)
If @error = 3 Then
    Msgbox(6, "Erreur", "Le port USB n'existe pas")
    $MergedLine = "NO USB"
EndIf
J'espère que ça marchera !^^
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#5

Message par Laddy »

Coucou
j'étais entrain de faire un peu la même et j'ai testé ton code ça ne fonctionne pas.

L'errorlevel est "incluse" dans la commande RMPARTUSB.exe
Mon fichier txt renvoie ceci :
RMPARTUSB v1.9.75 (c)2008-9 RM Education plc [SSi]
==================================================



Exit with Errorlevel 3
Errorlevel 3 indique que la clé n'est pas connecté.

Je met la commande externe en téléchargement ici si vous souhaitez tester.
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#6

Message par alex1205 »

Et ça ?

Code : Tout sélectionner

Global $file_2 = "RMPARTUSB v1.9.75 (c)2008-9 RM Education plc [SSi]" & @CRLF & "==================================================" & @Crlf & " " & @Crlf & " " & @Crlf & " "
$string = StringReplace(FileRead($File), $file_2, "")
If StringInStr($string, "Errorlevel") Then
    $errorlevel = StringReplace($string, "Exit with Errorlevel ", "")
EndIf
$errorlevel est à remplacer par @error
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#7

Message par Laddy »

Re,
j'ai testé et toujours pas snif j'ai remplacé $File par $ListUSB pour coller à ma variable je pense être juste

Code : Tout sélectionner

$ListUSB = "File.txt" 
Run(@ComSpec & " /c RMPARTUSB.exe USB list > " & $ListUSB, "", @SW_HIDE)
Global $file_2 = "RMPARTUSB v1.9.75 (c)2008-9 RM Education plc [SSi]" & @CRLF & "==================================================" & @Crlf & " " & @Crlf & " " & @Crlf & " "
$string = StringReplace(FileRead([b]$ListUSB[/b]), $file_2, "")
If StringInStr($string, "Errorlevel") Then
    $errorlevel = StringReplace($string, "Exit with Errorlevel ", "")
EndIf

If $errorlevel = 3 Then
    Msgbox(6, "Erreur", "Le port USB n'existe pas")
    $MergedLine = "NO USB"
EndIf
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#8

Message par Tlem »

De temps en temps il serait bien de lire la doc des commandes AutoIt que vous utilisez. :evil:
Run
--------------------------------------------------------------------------------
Runs an external program.

Run ( "program" [, "workingdir" [, show_flag[, opt_flag ]]] )

Blablabla ...

Remarks
Blablabla ...

Providing the Standard I/O parameter with the proper values permits interaction with the child process through the StderrRead, StdinWrite and StdoutRead functions. Combine the flag values (or use $STDERR_CHILD, $STDIN_CHILD & $STDOUT_CHILD, defined in Constants.au3) to manage more than one stream.
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é".
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#9

Message par Laddy »

Bonjour
je l'ai consulté mais tout le monde ne maitrise pas la langue anglaise et google translate ne donne pas de bonne traduction pour bien comprendre.
J'ai regardé StderrRead, j'obtiens le contenu de ma commande dans la seconde msgbox :( avec pleins d'autres ensuite, mais ça ne gère pas mon errorlevel directement....
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#10

Message par Tlem »

Laddy a écrit :tout le monde ne maitrise pas la langue anglaise
C'est plutôt handicapant pour utiliser un langage comme AutoIt qui n'est qu'en Anglais. :mrgreen:

Si le retour de votre EXE ne suffit pas et que vous cherchez absolument à récupérer le ExitCode, alors suivez ce lien : http://www.autoitscript.com/forum/index ... opic=23096

C'est tout en Anglais, mais le dernier message devrait peut être vous être utile. ;)
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é".
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#11

Message par sksbir »

Bonjour

Et pourquoi ne pas utiliser runwait ? runwait renvoie le return code de la commande lancée.

Par ailleurs, il faut penser à entourer le nom du fichier avec des quote parce que si il y a des espaces dans le nom du fichier stocké dans $LISTUSB, ça ne fonctionnera pas sans les quotes

Et enfin, utiliser la redirection d'erreur dans la sortie standard de façon à exploiter tout ce qui s'est passé.

La commande :

Code : Tout sélectionner

RunWait(@ComSpec & " /c RMPARTUSB.exe USB list > " & $ListUSB, "", @SW_HIDE)
devient donc :

Code : Tout sélectionner

RunWait(@ComSpec & " /c RMPARTUSB.exe USB list > """ & $ListUSB & """ 2>&1", "", @SW_HIDE)
Variante possible si on veut la sortie d'erreur dans un autre fichier:

Code : Tout sélectionner

RunWait(@ComSpec & " /c RMPARTUSB.exe USB list > """ & $ListUSB & """ 2> """ & $ListUSBERR & """", "", @SW_HIDE)
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#12

Message par Laddy »

Bonjour Tlem, sksbir

sksbir > Merci pour ton aide et tes explications. J'ai testé la dernière ligne et j'ai pas de change mon fichier est vide ($ListUSBERR) :(

Tlem > Oui, difficile de saisir les petits trucs en anglais, je vais jeter un oeil vers le lien que tu m'as donné. Merci


J'ai essayé ceci :

_RunDOS("RMPARTUSB.exe USB list")

car le fonction existe dans autoit je l'ai vu dans l'aide.



pfff quelle prise de tête.

Laddy
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#13

Message par sksbir »

Laddy a écrit :Bonjour Tlem, sksbir
sksbir > Merci pour ton aide et tes explications. J'ai testé la dernière ligne et j'ai pas de change mon fichier est vide ($ListUSBERR) :(
Ok, c'est juste que toute la sortie de ta commande se fait sur la sortie standard.

Sinon, je ne vois pas quel est le soucis avec la commande runwait ?

- Soit tu as un soucis avec le fait qu'il faut attendre la fin d'exécution pour que le script reprenne la main ( et dans ce cas là , on en reparle )
- Soit tu as zappé le truc à propos du return code et runwait :

donc : $TOTO=runwait(ma commande), et dans $TOTO tu auras le return code de ta commande....
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Errorlevel d'une commande externe

#14

Message par Laddy »

Ok j'ai compris, je me perds dans les variables, j'en avais pas mis et je n'avais pas de retour d'erreur correct.

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <Date.au3>
#include <Process.au3>
#Include <Constants.au3>

$ListUSB = "File.txt" ; @TempDir &"\" &"Laddy.jpg"
$ListUSBERR = "error.txt"
$Toto = RunWait(@ComSpec & " /c RMPARTUSB.exe USB list > " & $ListUSB, "", @SW_HIDE)
If $Toto = 3 Then
    Msgbox(6, "Erreur", "Le port USB n'existe pas")
    $MergedLine = "NO USB"
EndIf
 
Merci beaucoup :D
Je vais essayer de passer à la suite, récupérer les informations contenues dans le fichier txt.
Laddy
Répondre