Process management library

pip install psh==0.2.8


psh allows you to spawn processes in Unix shell-style way.

Unix shell is very convenient for spawning processes, connecting them into pipes, etc., but it has a very limited language which is often not suitable for writing complex programs. Python is a very flexible and reach language which is used in a wide variety of application domains, but its standard subprocess module is very limited. psh combines the power of Python language and an elegant shell-style way to execute processes.


Print output of echo -n "text":

from psh import sh
print sh.echo("-n", "text").execute().stdout()

Get a list of all available network interfaces (ifconfig | egrep -o "^[^[:space:]:]+"):

from psh import sh
interfaces = [ iface.rstrip("\n") for iface in sh.ifconfig() | sh.egrep("-o", "^[^[:space:]:]+") ]

Check free disk space on remote host

import re
from psh import sh

# ssh 'df | egrep "^/dev/"'
with sh.ssh("", sh.df() | sh.egrep("^/dev/"), _shell = True) as ssh:
    for line in ssh:
        match ="^(/dev/[^\s+]+)\s+(?:[^\s]+\s+){3}(\d+)%\s+(/.*)$", line.rstrip("\n"))
        device, used, mount_point = match.groups()
        if int(used) > 80:
            print "{0} ({1}) ran out of disk space ({2}%)".format(device, mount_point, used)


/dev/sda1 (/) ran out of disk space (86%)
/dev/sda2 (/mnt/data) ran out of disk space (95%)


Complete documentation is available at