[Wapt] création paquet flash

Hubert TOUVET htouvet at tranquil.it
Tue Jun 25 15:52:13 CEST 2013


Le 25/06/2013 14:21, LECLERCQ Johann a écrit :
>     Bonjour,
>
> Quelle est la Différence entre :
>
>     run_notfatal('taskkill /im firefox.exe /f')
> et
>     killalltasks('firefox')
>
killalltasks est une fonction de setuphelpers qui fait la même chose 
qu'appeller la commande windows taskkill
Il est préférable d'utiliser killalltasks car cela ne relance pas un 
sous-process. Mais les deux approches fonctionnent.
>
> Quelle est la différence entre :
>
>     run_notfatal(WAPT.uninstall_cmd(flash['key']))
>
> et
>     cmd = WAPT.uninstall_cmd(uninstall['key'])
>     run(cmd)
>
les fonctions "run" et "run_notfatal" lancent toutes les deux des 
sous-processus (installation de msi, de setup.exe ou autres programmes 
exécutables)
La différence se situe dans le comportement si le code de retour du 
sous-processus est différent de 0 (zéro).
Un processus, quand il se termine, renvoie un code numérique (code 
d'erreur). Un code zéro veut dire tout s'est bien passé. Un code 
différent de zéro est en général une erreur. (en particulier, 
l'installation d'un MSI qui échoue renvoie souvent un code 1603... qui 
ne donne pas beaucoup d'information sur le problème
)
Dans le cas de "run", si un code différent de zéro est renvoyé, wapt-get 
s'arrête avec une erreur (on dit qu'une Exception est levée)
Dans le cas de "run_notfatal", on considère que ce n'est pas une erreur 
fatale si le sous-processus ne renvoie pas zéro... (c'est à dire, qu'il 
vaut mieux quand même essayer de continuer l'installation ou le 
processus). Seul un warning est loggé.

Dans le cas ci-dessus, taskkill renvoie un code de retour différent de 
zéro s'il n'a killé aucun processus. Dinc run_notfatal était utilisé 
pour ne pas s'arrêter sur ce cas...
En fait, il aurait été préférable de traiter chaque cas.

Le code de retour en cas de processus introuvable (ce qui n'est pas une 
erreur dans notre cas) est 128
C:\tranquilit\wapt>taskkill /im firefox.exe
Erreur : le processus "firefox.exe" est introuvable.
C:\tranquilit\wapt>echo %ERRORLEVEL%
128

En python :
run('taskkill /im firefox.exe /f')
Traceback (most recent call last):
   File "<interactive input>", line 1, in <module>
   File "C:\tranquilit\wapt\setuphelpers.py", line 435, in run
     raise 
subprocess.CalledProcessError(proc.returncode,cmd,''.join(output))
CalledProcessError: Command '('taskkill /im firefox.exe /f',)' returned 
non-zero exit status 128

Donc le traitement correct aurait été :

from setuphelpers import *
import subprocess

try:
   run('taskkill /im firefox.exe /f')
except subprocess.CalledProcessError,e:
   if e.returncode <> 128:
     raise


> Y aurait-il eu des ajouts de nouvelles fonctions ?
> MERCI.



More information about the Wapt mailing list