Desidero utilizzare il sottoprocesso per eseguire un programma, ma è necessario limitare il tempo di esecuzione. Ad esempio, se viene eseguito più di 2 secondi, voglio ucciderlo.Come limitare il tempo di esecuzione del programma quando si utilizza il sottoprocesso?
Per i programmi comuni, kill() funziona correttamente. Ma se provo a eseguire /usr/bin/time something
, kill() non può davvero uccidere il programma.
Ma il mio codice di seguito sembra non funzionare bene, il programma è ancora in esecuzione.
import subprocess
import time
exec_proc = subprocess.Popen("/usr/bin/time -f \"%e\\n%M\" ./son > /dev/null", stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell = True)
max_time = 1
cur_time = 0.0
return_code = 0
while cur_time <= max_time:
if exec_proc.poll() != None:
return_code = exec_proc.poll()
break
time.sleep(0.1)
cur_time += 0.1
if cur_time > max_time:
exec_proc.kill()
duplicati con http://stackoverflow.com/questions/1191374/subprocess-with-timeout – starrify