2009-09-04 11 views

Respuesta

8

Eche un vistazo al módulo subprocess. También puede usar primitivas de bajo nivel como fork() a través del módulo os.

3

una función simple que utiliza el módulo subproceso:

def CMD(cmd) : 
    p = subprocess.Popen(cmd, shell=True, 
         stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE, 
         close_fds=False) 
    return (p.stdin, p.stdout, p.stderr) 
0

Si necesita interactuar con el sub proceso en absoluto, recomiendo el módulo pexpect (link text). Puede enviar datos de entrada al proceso, recibir (o "esperar") resultados a cambio, y puede cerrar el proceso (con force = True para enviar SIGKILL).

13

Aquí hay un pequeño script de Python que inicia un proceso, verifica si se está ejecutando, espera un momento, lo mata, espera a que termine y luego vuelve a verificar. Utiliza el comando 'matar'. La versión 2.6 del subproceso python tiene una función kill. Esto fue escrito en 2.5.

import subprocess 
import time 

proc = subprocess.Popen(["sleep", "60"], shell=False) 
print 'poll =', proc.poll(), '("None" means process not terminated yet)' 
time.sleep(3) 
subprocess.call(["kill", "-9", "%d" % proc.pid]) 
proc.wait() 
print 'poll =', proc.poll() 

La salida temporizada muestra que se terminó después de aproximadamente 3 segundos, y no 60 como sugiere la llamada a la suspensión.

$ time python prockill.py 
poll = None ("None" means process not terminated yet) 
poll = -9 

real 0m3.082s 
user 0m0.055s 
sys 0m0.029s 
+1

puede usar 'os.kill (..)' para matar el proceso –

+1

o incluso 'proc.terminate()' 'o proc.kill()' Como Python 2.6 –

Cuestiones relacionadas