2010-07-10 3 views
1

Puis-je utiliser Popen à partir du sous-processus python pour fermer le processus démarré? Par exemple, à partir de popen, je lance une application. Dans une partie de mon code, je dois fermer cette application a couru. Par exemple, à partir de la console sous Linux que je fais:Processus de fermeture

./some_bin 
... It works and logs stdout here ... 
Ctrl + C and it breaks 

je besoin de quelque chose comme Ctrl + C, mais dans mon code de programme.

Répondre

2
from subprocess import Popen 
process = Popen(['slow', 'running', 'program']) 
while process.poll(): 
    if raw_input() == 'Kill': 
     if process.poll(): process.kill() 

kill() va tuer un processus. Voir plus ici: Python subprocess module

+0

Vous êtes sûr de ne pas avoir mélangé deux conditions? Ne devrait-il pas être 'while process.poll(): if raw_input() == 'Kill''? – zneak

+0

Votre version bloquera encore le 'raw_input()', tout comme le mien, sauf que les vérifications que le processus exécute juste avant que nous essayons de le tuer, soient vérifiées avant le blocage 'raw_input()', ce qui signifie le processus aurait pu se terminer avant que nous essayions de le tuer. –

+0

Ce n'est pas une question de blocage, c'est une question de bouclage. Votre boucle ne sera pas bouclée du tout. Si vous tapez "Kill", il s'arrête. Et si vous ne tapez pas "Kill", il s'arrête également. Sauf que dans ce cas le processus est toujours en cours. D'un autre côté, la solution que je suggère sera, en effet, en boucle. – zneak

2

Utilisez le module subprocess.

import subprocess 

# all arguments must be passed one at a time inside a list 
# they must all be string elements 
arguments = ["sleep", "3600"] # first argument is the program's name 

process = subprocess.Popen(arguments) 
# do whatever you want 
process.terminate() 
+0

Êtes-vous shure dans 'subprocess.terminate()'? Peut-être 'process.terminate()'? – Ockonal

+0

Merde! Je voulais dire 'process.terminate()', en effet. Je vais arranger ça. – zneak

Questions connexes