Enviar SIGINT en python a os.system

Estoy intentando ejecutar un comando de Linux strace -c ./client en python con os.system() . Cuando ctrl+c obtengo algo de salida en el terminal. Tengo que enviar la señal de ctrl+c programáticamente después de un minuto y quiero la salida de terminal que se produce después de presionar ctrl+c en un archivo. Un pseudo script será de gran ayuda. Si uso subprocess.Popen y luego envíe la señal ctrl+c desde el teclado, no os.system salida en el terminal, por lo que os.system usar os.system

En Python, puedes enviar programáticamente una señal Ctrl+C usando os.kill . El problema es que necesita el pid del proceso que recibirá la señal y os.system no le dice nada al respecto. Deberías usar subprocess para eso. No entiendo lo que dijiste sobre no obtener la salida en el terminal.

De todos modos, así es como puedes hacerlo:

 import subprocess import signal import os devnull = open('/dev/null', 'w') p = subprocess.Popen(["./main"], stdout=devnull, shell=False) # Get the process id pid = p.pid os.kill(pid, signal.SIGINT) if not p.poll(): print "Process correctly halted" 

Recomendaría el módulo de subproceso python para ejecutar comandos de linux. En ese sentido, la señal SIGINT (equivalente a la interrupción del teclado Ctrl-C) puede enviarse programáticamente a un comando usando la función Popen.send_signal (signal.SIGINT). La función Popen.communicate () te dará salida. Por ejemplo

 import subprocess import signal .. process = subprocess.Popen(..) # pass cmd and args to the function .. process.send_signal(signal.SIGINT) # send Ctrl-C signal .. stdout, stderr = process.communicate() # get command output and error ..