Bonjour,
Je suis dans la création d'un paquet pour Cadence OrCAD 17.2 Les modules "OrCAD Products" s'installent bien. Par contre il y a un processus(cdnshelpindexer.exe) qui ne fonctionne pas correctement lors de l'installation des modules "Allegro Products".
Savez-vous comment tuer un processus alors que la fonction run est en-cours ?
Cordialement,
Frédéric G
Bonjour Frédéric,
Je suis dans la création d'un paquet pour Cadence OrCAD 17.2 Les modules "OrCAD Products" s'installent bien. Par contre il y a un processus(cdnshelpindexer.exe) qui ne fonctionne pas correctement lors de l'installation des modules "Allegro Products".
Savez-vous comment tuer un processus alors que la fonction run est en-cours ?
pour kiler un process, on peut le faire avec la commande suivante (en prenant pas exemple firefox.exe). run(r'taskkill /f /im firefox.exe')
Par contre dans votre cas, il faudrait "threader" le run() pour surveiller le processus en question et le killé le moment voulu. Je ne pense pas que c'est forcément une bonne idée de faire du threading dans le setup.py.
Vous pouvez essayer de rendre l'installeur "non bloquant" avec un run('START /B moninstalleur.exe') et après mettre une boucle pour vérifier quel process est entrain de tourner et le killer le cas échéant. Il ne faut pas sortir du setup.py tant que l'installation n'est pas fini, sinon l'agent WAPT killera tout dans sa procédure de nettoyage post setup.py.
Si le process cdnshelpindexer.exe est le dernier qui reste à la fin, vous pouvez rajouter un timeout plus court si l'installeur met à peu prêt toujours le même temps pour s'installer.
Cordialement,
Denis
Cordialement,
*Frédéric G*
WAPT mailing list WAPT@lists.tranquil.it http://lists.tranquil.it/listinfo/wapt
Bonjour,
Ok merci, je n'avais pas pensé au Start.
Pour ceux que cela intéresserait, voici une fonction pour tuer une liste de processus après un certain laps de temps :
def waitprocessfinish(exenames, waittime=20): """wait for the process to be completed or timeout > waittime
Args: exenames : list of pending processes waittime : timeout in seconds. No timeout if waittime=None
waitprocessfinish('MATLAB.exe') waitprocessfinish(['MATLAB.exe','cmd.exe'], waittime=None)
""" def on_terminate(proc): print("process {} terminated with exit code {}".format(proc, proc.returncode))
procs = [] logger.debug('Wait process finish %s' % (exenames,)) if not isinstance(exenames,list): exenames = [exenames] exenames = [exe.lower() for exe in exenames]+[exe.lower()+'.exe' for exe in exenames] for p in psutil.process_iter(): try: if p.name().lower() in exenames: procs.append(p) except (psutil.AccessDenied,psutil.NoSuchProcess): pass logger.debug('Wait process finish %i' % (p.pid,)) gone, alive = psutil.wait_procs(procs, timeout=waittime, callback=None) for p in alive: p.kill()
Je me suis fortement inspiré de la fonction "killalltasks" et de ce que j'ai trouvé sur le net. Je n'ai pas compris grand chose à ce que j'ai fait mais cela fonctionne ^^ La fonction def on_terminate(proc): sert au callback de psutil.wait_procs mais je ne l'ai pas intégré.
Frédéric G
De: "Denis Cardon" dcardon@tranquil.it À: "Frederic Garesche" Frederic.Garesche@insa-rennes.fr, wapt@lists.tranquil.it Envoyé: Mardi 5 Juin 2018 18:03:42 Objet: Re: [Wapt] Comment tuer un processus lors d'une commande run ?
Bonjour Frédéric,
Je suis dans la création d'un paquet pour Cadence OrCAD 17.2 Les modules "OrCAD Products" s'installent bien. Par contre il y a un processus(cdnshelpindexer.exe) qui ne fonctionne pas correctement lors de l'installation des modules "Allegro Products".
Savez-vous comment tuer un processus alors que la fonction run est en-cours ?
pour kiler un process, on peut le faire avec la commande suivante (en prenant pas exemple firefox.exe). run(r'taskkill /f /im firefox.exe')
Par contre dans votre cas, il faudrait "threader" le run() pour surveiller le processus en question et le killé le moment voulu. Je ne pense pas que c'est forcément une bonne idée de faire du threading dans le setup.py.
Vous pouvez essayer de rendre l'installeur "non bloquant" avec un run('START /B moninstalleur.exe') et après mettre une boucle pour vérifier quel process est entrain de tourner et le killer le cas échéant. Il ne faut pas sortir du setup.py tant que l'installation n'est pas fini, sinon l'agent WAPT killera tout dans sa procédure de nettoyage post setup.py.
Si le process cdnshelpindexer.exe est le dernier qui reste à la fin, vous pouvez rajouter un timeout plus court si l'installeur met à peu prêt toujours le même temps pour s'installer.
Cordialement,
Denis
Cordialement,
*Frédéric G*
WAPT mailing list WAPT@lists.tranquil.it http://lists.tranquil.it/listinfo/wapt