Send SIGINT in python to os.system
Solution 1
In Python, you could programatically send a Ctrl+C
signal using os.kill. Problem is, you need the pid
of the process that'll receive the signal, and os.system
does not tell you anything about that. You should use subprocess
for that. I don't quite get what you said about not getting the output on the terminal.
Anyways, here's how you could do it:
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"
Solution 2
I would recommend subprocess python module for running linux commands. In that, SIGINT signal (equivalent to Ctrl-C keyboard interrupt) can be sent programmatically to a command using Popen.send_signal(signal.SIGINT) function. Popen.communicate() function will give you output. For example
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
..
user2591307
Updated on July 09, 2022Comments
-
user2591307 almost 2 years
I am trying to run a Linux command
strace -c ./client
in python withos.system()
. When i pressctrl+c
i get some output on the terminal.I have to send thectrl+c
signal programmatically after one minute and want the terminal output that is produced after pressingctrl+c
in a file. A pseudo script will be really helpful.If i usesubprocess.Popen
and then sendctrl+c
signal from keyboard i didn't get output on the terminal,so have to useos.system