I am trying to run a Linux command strace -c ./client
in python with os.system()
. When I press Ctrl + C I get some output on the terminal. I have to send the "Process correctly halted" signal programmatically after one minute and want the terminal output that is produced after pressing Ctrl + C in a file.
A pseudo script will be really helpful. If I use subprocess.Popen
and then send Ctrl + C signal from keyboard I didn't get output on the terminal,so have to use os.system
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")
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
..
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With