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.