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

Imágen de perfil
Val: 1.143
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ejecutar cualquier comando con un tiempo determinadográfica de visualizaciones


Python

Actualizado el 15 de Abril del 2019 por xve (Publicado el 29 de Diciembre del 2015)
4.427 visualizaciones desde el 29 de Diciembre del 2015. Una media de 28 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

Actualizado el 15 de Abril del 2019 (Publicado el 29 de Diciembre del 2015)gráfica de visualizaciones de la versión: Versión 1.0
4.428 visualizaciones desde el 29 de Diciembre del 2015. Una media de 28 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Python 2.x y Python 3.x
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
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3391
Revisar política de publicidad