Python process launching
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.coveragerc more accurate coverage Dec 31, 2014
.gitignore Ignore all python-compiled files Feb 11, 2015
.travis.yml changelog for 1.12.9 Jan 4, 2017
LICENSE.txt Added packaging files. Fixes #11. Jan 30, 2012
README.rst updated dev readme Nov 21, 2016
requirements-dev.txt give coveralls another go Nov 23, 2016
requirements-docs.txt cleaning up requirements files Oct 31, 2016
setup.cfg python wheel Nov 21, 2016 updating support for 3.5 Nov 29, 2016 version bump to 1.12.9 Jan 4, 2017 mechanism for skipping test based on missing system bins Dec 16, 2016


Version Python Versions Build Status Coverage Status

sh is a full-fledged subprocess replacement for Python 2.6 - 3.5, PyPy and PyPy3 that allows you to call any program as if it were a function:

from sh import ifconfig
print ifconfig("eth0")

sh is not a collection of system commands implemented in Python.


$> pip install sh

Complete documentation @



First install the development requirements:

$> pip install -r requirements-dev.txt

The run the tests for all Python versions on your system:

$> python test

To run a single test for all environments:

$> python test FunctionalTests.test_unicode_arg

To run a single test for a single environment:

$> python test -e 3.4 FunctionalTests.test_unicode_arg


First run all of the tests:

$> python test

This will aggregate a .coverage. You may then visualize the report with:

$> coverage report

Or generate visual html files with:

$> coverage html

Which will create ./htmlcov/index.html that you may open in a web browser.