Skip to main content

Shell power for Python.

Project description

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

Project details


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.1.tar.gz (6.1 kB view details)

Uploaded Source

File details

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

File metadata

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

File hashes

Hashes for shell.py-0.5.1.tar.gz
Algorithm Hash digest
SHA256 6430a9583494aa3af645293ccff6585a55ba170fdbfe868a5ac0460797579272
MD5 873364ad265cbc683c83f864241e269e
BLAKE2b-256 5f986f7d35bbde5916afe7dc21c6169c115faa277b748ef4499def2a1c26a33d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page