ANN: Version 0.1.6 of sarge (a subprocess wrapper library) has been released.

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
https://bitbucket.org/vinay.sajip/sarge/
And you can leave feedback on the issue tracker there.
I hope you find Sarge useful!
Regards,
Vinay Sajip
participants (1)
-
Vinay Sajip