[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