I heard the above-mentioned lines many times in the past 10 years. Meanwhile I
used Python to develop various kinds of applications. Starting from
web-applications to system tools, small command line tools or complex
application dealing with Operating System ABI. Using Python as a gluing
language helped me many times in those cases. There is a custom function which
I think is the highest used function in the applications I wrote.
system function call
The following is the Python3 version.
import subprocess def system(cmd): """ Invoke a shell command. :returns: A tuple of output, err message and return code """ ret = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) out, err = ret.communicate() return out, err, ret.returncode
The function uses
subprocess module. It
takes any shell command as input, executes the command, and returns any output,
error text, and exit code. Remember that in Python3 out, and err are bytes,
not strings. So, we have to decode them to standard strings before using.
This small function enabled me to reuse any other already existing tool, and
build on top of them. Some developers will advise doing everything in more
Pythonic API. But, in many cases no API is available. I found using this
function, and then parsing the text output is much simpler than writing a
library first. There is an overhead of creating a new process, and running it,
and there are times when it is a big overhead. But again, for simple tools or
backend processes (which does have to provide a real-time output) this is
helpful. You can use this to create a PoC application, and then you can profile
the application to find all the pain points.