Código de Python - Ejecutar cualquier comando con un tiempo determinado

Imágen de perfil

Ejecutar cualquier comando con un tiempo determinadográfica de visualizaciones


Python

Publicado el 29 de Diciembre del 2015 por xve
1.525 visualizaciones desde el 29 de Diciembre del 2015. Una media de 35 por semana
Este código muestra una función que ejecuta cualquier comando con un timeout o tiempo determinado, definido para cada instrucción.
Esta función tienes que recibir el comando a ejecutar, y el tiempo máximo de ejecución. Si pasado dicho tiempo sigue ejecutándose devuelve la excepción timeout

Versión 1.0

Publicado el 29 de Diciembre del 2015gráfica de visualizaciones de la versión: Versión 1.0
1.526 visualizaciones desde el 29 de Diciembre del 2015. Una media de 35 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import subprocess
import time
import sys
 
class Timeout(Exception):
	pass
 
def run(command, timeout=10):
	"""
	Esta función tienes que recibir el comando a ejecutar, y el tiempo máximo
	de ejecución. Si pasado dicho tiempo sigue ejecutandose devuelve la
	excepcion timeou
	"""
	proc = subprocess.Popen(command, bufsize=0, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
	poll_seconds = .250
	deadline = time.time()+timeout
	while time.time() < deadline and proc.poll() == None:
		time.sleep(poll_seconds)
 
	if proc.poll() == None:
		proc.terminate()
		raise Timeout()
 
	stdout, stderr = proc.communicate()
	return stdout, stderr, proc.returncode
 
if __name__=="__main__":
 
	try:
		# ejecutamos un simple "ls -l"
		(stdout, stderr, returncode)=run(["ls -l"])
		print "ls -l -> ok"
	except Timeout:
		print "timeout"
 
	try:
		# ejecutamos un "find /" que normalmente tarda mas de 5 segundos
		(stdout, stderr, returncode)=run(["find /"], timeout=5) #should timeout
		print "find / -> ok"
	except Timeout:
		print "timeout"



Comentarios sobre la versión: Versión 1.0 (0)


No hay comentarios
 

Comentar la versión: Versión 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s3391