Python - Script .Detener una funcion con llamada shell

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 22 puestos en Python (en relación al último mes)
Gráfica de Python

Script .Detener una funcion con llamada shell

Publicado por santtlorenzo (2 intervenciones) el 18/10/2018 19:57:56
Buenas tardes compañeros :
Tengo una maquina corriendo con python 2.7 y 2 funciones montadas la primera lanza via shell el grabador de la tarjeta de audio y en teoria la segunda lo interrumpe.Si lo lanzo via Bash los comandos funcionan correctamente.
Via Python la funcion recording ejecuta y comienza a grabar ,pero la funcion STOP no detiene la funcion recording
Soy principiante en los scripts y no lo tengo claro. ¿Como podria tener la ejecución de la funcion recording? Lo tengo en un bucle infinito en la que se revisa la variable X si no se cumple "romperia el script arecord.
Muchas gracias por vuestra ayuda.
Saludos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def recording(): #record Voice with driver ALSA 
	commands.getoutput('arecord -f S16_LE  -r 48000  /root/records/test.wav')
 
 
def stop_recording():
	commands.getoutput('killall arecord')
 
while True:  #loop
 
 	time.sleep(1)
 
 	if  xx:
 		print ("ok")
 		recording()
 
	else:
 
		print("ko")
		stop_recording()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Script .Detener una funcion con llamada shell

Publicado por kip (257 intervenciones) el 19/10/2018 15:55:23
Hola, con la clase Popen del modulo subprocess sería algo asi:

1
2
3
4
5
6
7
8
9
>>> from subprocess import Popen
>>> from time import sleep
>>> with Popen(["sleep", "360"]) as sleepProc:
...   sleep(10)
...   sleepProc.kill()
...   code = sleepProc.wait()
...   print(code)
...
-9

Si lo ejecutas te darás cuenta que en realidad no espera los 360 segs que coloque como argumento para la instruccion sleep, simplemente se tarda 10 segs porque antes del kill coloque el sleep() para que se perciba el "efecto", es necesario el wait() para obtener el codigo de retorno del proceso y evitar asi que este permanezca en estado "zombie".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 22 puestos en Python (en relación al último mes)
Gráfica de Python

Script .Detener una funcion con llamada shell

Publicado por santtlorenzo (2 intervenciones) el 20/10/2018 00:02:10
Muchas gracias.Podrias ponerme un ejemplo para detener el proceso desde otra funcion?
Es decir desde la primera utilizo popen y desde la segunda funcion el kill.Pero no me queda claro como realizarlo.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar