Version 0.1.6 of Sarge, a cross-platform library which wraps the subprocess module in the standard library, has been released.
What changed? -------------
- Fixed #44: Added an optional timeout to Command.wait() and Pipeline.wait(), which only takes effect on Python >= 3.3.
- Fixed #47: Added the ``replace_env`` keyword argument which allows a complete replacement for ``os.environ`` to be passed.
- Fixed #51: Improved error handling around a Popen call.
What does Sarge do? -------------------
Sarge tries to make interfacing with external programs from your Python applications easier than just using subprocess alone.
Sarge offers the following features:
* A simple way to run command lines which allows a rich subset of Bash- style shell command syntax, but parsed and run by sarge so that you can run on Windows without cygwin (subject to having those commands available):
from sarge import capture_stdout p = capture_stdout('echo foo | cat; echo bar') for line in p.stdout: print(repr(line))
... 'foo\n' 'bar\n'
* The ability to format shell commands with placeholders, such that variables are quoted to prevent shell injection attacks.
* The ability to capture output streams without requiring you to program your own threads. You just use a Capture object and then you can read from it as and when you want.
* The ability to look for patterns in captured output and to interact accordingly with the child process.
Advantages over subprocess ---------------------------
Sarge offers the following benefits compared to using subprocess:
* The API is very simple.
* It's easier to use command pipelines - using subprocess out of the box often leads to deadlocks because pipe buffers get filled up.
* It would be nice to use Bash-style pipe syntax on Windows, but Windows shells don't support some of the syntax which is useful, like &&, ||, |& and so on. Sarge gives you that functionality on Windows, without cygwin.
* Sometimes, subprocess.Popen.communicate() is not flexible enough for one's needs - for example, when one needs to process output a line at a time without buffering the entire output in memory.
* It's desirable to avoid shell injection problems by having the ability to quote command arguments safely.
* subprocess allows you to let stderr be the same as stdout, but not the other way around - and sometimes, you need to do that.
Python version and platform compatibility -----------------------------------------
Sarge is intended to be used on any Python version >= 2.6 and is tested on Python versions 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, 3.7 and 3.8 on Linux, Windows, and Mac OS X (not all versions are tested on all platforms, but sarge is expected to work correctly on all these versions on all these platforms).
Finding out more ----------------
You can read the documentation at
There's a lot more information, with examples, than I can put into this post.
You can install Sarge using "pip install sarge" to try it out. The project is hosted on BitBucket at
And you can leave feedback on the issue tracker there.
I hope you find Sarge useful!