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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shell.py-0.5.3.tar.gz (6.4 kB view details)

Uploaded Source

File details

Details for the file shell.py-0.5.3.tar.gz.

File metadata

  • Download URL: shell.py-0.5.3.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for shell.py-0.5.3.tar.gz
Algorithm Hash digest
SHA256 f0ce6c0688b84392a04311f27f4f0661cd37ef532eb99703b5e17b8cb58e93a1
MD5 b4415d341ec719d7214c4280b46369af
BLAKE2b-256 4598ca6829dbab4aa0a1b3abec62c15be979b96a96612f5adfffec38cc7ca353

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.5.3 This release

1 file

0.5.2

1 file

0.5.1

1 file

0.5.0

1 file

0.4.0

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page