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

Vinay Sajip vinay_sajip at yahoo.co.uk
Tue Jun 4 14:06:47 CEST 2013


Version 0.1.1 of Sarge, a cross-platform library which wraps the subprocess
module in the standard library, has been released.

What changed?
-------------

- Added the ability to scan for specific patterns in subprocess output streams.

- Added convenience methods to operate on wrapped subprocesses.

- Exceptions which occur while spawning subprocesses are now propagated.

- Fixed issues #2, #3, and #4.

- Improved shell_shlex resilience with Unicode on 2.x.

- Added get_stdout, get_stderr and get_both for when subprocess output is not
  expected to be voluminous.

- Added an internal lock to serialise access to shared data.

- Added tests to cover added functionality and reported issues.

- Added numerous documentation updates.

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.

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.1, 3.2 and 3.3 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

http://sarge.readthedocs.org/

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


More information about the Python-announce-list mailing list