2009-09-04 8 views

risposta

8

Dai un'occhiata al modulo subprocess. È inoltre possibile utilizzare primitive di basso livello come fork() tramite il modulo os.

3

Un semplice funzione che utilizza modulo sottoprocesso:

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

Se necessario interagire con il sub processo a tutti, raccomando il modulo pexpect (link text). È possibile inviare in input il processo, ricevere (o "prevedere") l'output in risposta e chiudere il processo (con force = True per inviare SIGKILL).

13

Ecco un piccolo script python che avvia un processo, controlla se è in esecuzione, attende un po ', lo uccide, attende che termini, quindi controlla di nuovo. Usa il comando "uccidi". La versione 2.6 del subprocesso python ha una funzione kill. Questo è stato scritto il 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() 

L'uscita temporizzata mostra che è stata interrotta dopo circa 3 secondi, e non 60 come chiamata ad suggerisce sonno.

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

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

è possibile utilizzare 'os.kill (..)' per uccidere il processo –

+1

o anche 'proc.terminate()' o 'proc.kill()' dal Python 2.6 –

Problemi correlati