Skip to main content

Object-oriented commandline

Project description

License pypi CI CodeQL codecov.io readthedocs.org python3.8 black

Object-oriented commandline

Install

$ pip install spall

Development

$ pip install spall

Usage

Import Subprocess from spall

>>> from spall import Subprocess

Instantiate individual executables

>>> cat = Subprocess("cat")
>>> echo = Subprocess("echo")
>>> fails = Subprocess("false")

Default is to return returncode and print stdout and stderr to console

>>> returncode = echo.call("Hello, world")
Hello, world
>>> returncode
0

Capture stdout with the capture keyword argument

>>> echo.call("Hello, world", capture=True)
0

Stdout is consumed by calling stdout() which returns a list

>>> echo.stdout()
['Hello, world']
>>> echo.stdout()
[]

Stdout is accrued until stdout() is called

>>> echo.call("Hello, world", capture=True)
0
>>> echo.call("Goodbye, world", capture=True)
0
>>> echo.stdout()
['Hello, world', 'Goodbye, world']
>>> echo.stdout()
[]

Pipe stdout to file with the file keyword argument

>>> import os
>>> import tempfile
>>>
>>> tmp = tempfile.NamedTemporaryFile(delete=False)
>>> echo.call("Hello, world", file=tmp.name)
0
>>> returncode = cat.call(tmp.name)
Hello, world
>>> returncode
0
>>> os.remove(tmp.name)

# redirect to /dev/null
>>> echo.call("Hello, world", file=os.devnull)
0

Failing command will raise a subprocess.CalledProcessError

>>> import contextlib
>>> from subprocess import CalledProcessError
>>>
>>> with contextlib.redirect_stderr(None):
...     try:
...         returncode = fails.call()
...     except CalledProcessError as err:
...         str(err)
"Command 'false' returned non-zero exit status 1."
>>> returncode
0

This, however, will not

>>> with contextlib.redirect_stderr(None):
...     fails.call(suppress=True)
1

All the keyword arguments above can be set as the default for the instantiated object

>>> echo = Subprocess("echo", capture=True)
>>> echo.call("Hello, world")
0
>>> echo.stdout()
['Hello, world']

Which can then be overridden

>>> returncode = echo.call("Hello, world", capture=False)
Hello, world
>>> returncode
0
>>> echo.stdout()
[]

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

spall-0.5.0.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spall-0.5.0-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file spall-0.5.0.tar.gz.

File metadata

  • Download URL: spall-0.5.0.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.8.11+ Linux/5.16.18-200.fc35.x86_64

File hashes

Hashes for spall-0.5.0.tar.gz
Algorithm Hash digest
SHA256 f2855bb5299ea02b919be0fddfb755cad35b8828273d725f5456020a41612c40
MD5 a2d9b9c6573cc9771e43b7e500a77377
BLAKE2b-256 651df685b7be8041f698cea6c35c5be634ffd0876f295db1f8f481c10a75c93e

See more details on using hashes here.

File details

Details for the file spall-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: spall-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.8.11+ Linux/5.16.18-200.fc35.x86_64

File hashes

Hashes for spall-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a10bb5c3861bb4ba11871b165831d5350737355367e89632810d4462d0da10f
MD5 e5c5f38e77bd041116f99f46dfd22421
BLAKE2b-256 37ba0e799b670b3ad702e76340a9f347dd0df45e585261bf634abf92cabbe45d

See more details on using hashes here.

Supported by

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