Skip to main content
https://badge.fury.io/py/shell.py.png https://travis-ci.org/houqp/shell.py.svg?branch=master

Bring the good part of Shell scripting to Python.

Install

$ pip install shell.py

Usage

Execute a shell command

Block until return:

>>> from shell import ex
>>> ex('echo hello shell.py').stdout()
'hello shell.py\n'

Asynchronous execution:

>>> from shell import ex
>>> c = asex('echo hello shell.py')
>>> # do something else
...
>>> c.stdout() # wait until process exit and read stdout
'hello shell.py\n'

Pipe commands

from shell import ex
re = (ex("ifconfig")
      | "grep -A 1 eth0"
      | "grep inet"
      | "awk '{print $2}'"
      | "cut -d: -f 2").stdout()

Or

from shell import pipe_all
pipe_all(["ls -la ~",
          "awk '{print $9}'",
          "grep -E '^\.'",
          "wc -l"]).stdout()

Use string as stdin

>>> from shell import instream
>>> instream("1 2 3").p("awk '{print $1}'").stdout()
'1\n'

This is equivalent to:

>>> from shell import ex
>>> ex("echo 1 2 3").p("awk '{print $1}'").stdout()

IO redirect

Overwrite a file:

>>> from shell import ex
>>> ex('echo yolo').wr('/tmp/out')
>>> ex('echo yolo') > '/tmp/out'

Append to a file:

>>> from shell import ex
>>> ex('echo yolo').ap('/tmp/out')
>>> ex('echo yolo') >> '/tmp/out'

Run commands in parallel

Block until all commands return:

>>> from shell import parallel as par
>>> par.ex_all(['sleep 2', 'sleep 2']) # return in 2s

Asynchronous parallel execution:

>>> from shell import parallel as par
>>> pe = par.asex_all(['sleep 2', 'sleep 2']) # return immediately
>>> # do something else
...
>>> pe.wait()

Set working directory

Set the directory in which the commands are executed:

>>> with shell.cwd('~/server/data/upload/') as old_path:
>>>     shell.ex('find ./images -name "*.png"') | 'minify ./public' >> 'upload.log'

This is equivalent to:

>>> shell.ex('find ~/server/data/upload/images -name "*.png"') | 'minify ~/server/data/upload/public' >> '~/server/data/upload.log'

See test cases for more examples.

Tests

Run tests with nosetests(at least v1.3.0):

$ make test

Metadata

Release files for shell.py 0.5.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shell.py 0.5.3
File Size Uploaded
shell.py-0.5.3.tar.gz 6.4 kB Details

Release files / shell.py-0.5.3.tar.gz

Download URL shell.py-0.5.3.tar.gz
Size 6.4 kB
Tags Source
SHA-256 checksum
How to use checksums
f0ce6c0688b84392a04311f27f4f0661cd37ef532eb99703b5e17b8cb58e93a1
BLAKE2b-256 checksum
How to use checksums
4598ca6829dbab4aa0a1b3abec62c15be979b96a96612f5adfffec38cc7ca353
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.5.3 This release

1 release file

0.5.2

1 release file

0.5.1

1 release file

0.5.0

1 release file

0.4.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page