Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling a command line utility from Python

I am currently trying to utilize strace to automatically trace a programm 's system calls. To then parse and process the data obtained, I want to use a Python script.

I now wonder, how would I go about calling strace from Python? Strace is usually called via command line and I don't know of any C library compiled from strace which I could utilize.

What is the general way to simulate an access via command line via Python? alternatively: are there any tools similar to strace written natively in Python?

I'm thankful for any kind of help.

Nothing, as I'm clueless

like image 512
Daniel Siegel Avatar asked Jun 12 '26 22:06

Daniel Siegel


2 Answers

You need to use the subprocess module.

It has check_output to read the output and put it in a variable, and check_call to just check the exit code.

If you want to run a shell script you can write it all in a string and set shell=True, otherwise just put the parameters as strings in a list.

import subprocess
# Single process
subprocess.check_output(['fortune', '-m', 'ciao'])
# Run it in a shell
subprocess.check_output('fortune | grep a', shell=True)

Remember that if you run stuff in a shell, if you don't escape properly and allow user data to go in your string, it's easy to make security holes. It is better to not use shell=True.

like image 104
LtWorf Avatar answered Jun 15 '26 22:06

LtWorf


You can use commands as the following:

import commands
cmd = "strace command"
result = commands.getstatusoutput(cmd)
if result[0] == 0:
   print result[1]
else:
   print "Something went wrong executing your command"

result[0] contains the return code, and result[1] contains the output.

like image 22
Walid Da. Avatar answered Jun 16 '26 00:06

Walid Da.