Skip to main content

a library for running child processes

Project description

duct.py Actions Status Coverage Status PyPI version Documentation Status

Duct is a library for running child processes. Duct makes it easy to build pipelines and redirect IO like a shell. At the same time, Duct helps you write correct, portable code: whitespace is never significant, errors from child processes get reported by default, and a variety of gotchas, bugs, and platform inconsistencies are handled for you the Right Way™.

Changelog

  • v0.6.2
    • Added ReaderHandle.try_wait.
  • v0.6.1
    • Added ReaderHandle.kill.
    • Kill methods no longer wait on IO threads to complete. This avoids blocking on unkilled grandchildren.
  • v0.6.0
    • Removed the sh function.
    • Removed the then method.
    • Added Handle.kill.
    • Added ReaderHandle and Expression.reader.
    • Added Expression.stdout_stderr_swap.
    • Added Expression.before_spawn.
    • Renamed stdin/stdout/stderr to stdin_path/stdout_path/stderr_path.
    • Renamed input to stdin_bytes.
    • This will be the last major release supporting Python 2.

Examples

Run a command without capturing any output. Here "hi" is printed directly to the terminal:

>>> from duct import cmd
>>> cmd("echo", "hi").run()
hi
Output(status=0, stdout=None, stderr=None)

Capture the standard output of a command. Here "hi" is returned as a string:

>>> cmd("echo", "hi").read()
'hi'

Capture the standard output of a pipeline:

>>> cmd("echo", "hi").pipe(cmd("sed", "s/i/o/")).read()
'ho'

Merge standard error into standard output and read both incrementally:

>>> big_cmd = cmd("bash", "-c", "echo out && echo err 1>&2")
>>> reader = big_cmd.stderr_to_stdout().reader()
>>> with reader:
...     reader.readlines()
[b'out\n', b'err\n']

Children that exit with a non-zero status raise an exception by default:

>>> cmd("false").run()
Traceback (most recent call last):
...
duct.StatusError: Expression cmd('false') returned non-zero exit status: Output(status=1, stdout=None, stderr=None)
>>> cmd("false").unchecked().run()
Output(status=1, stdout=None, stderr=None)

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

duct-0.6.2.tar.gz (15.7 kB view details)

Uploaded Source

File details

Details for the file duct-0.6.2.tar.gz.

File metadata

  • Download URL: duct-0.6.2.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.4

File hashes

Hashes for duct-0.6.2.tar.gz
Algorithm Hash digest
SHA256 9f85b30ef12278efba5d61f4a91216b2393773abf9c8c31af28efc5b3a662c85
MD5 e5286afce1ba5b7d9a1f25ed7e0c77f4
BLAKE2b-256 51efe01ebfa1ffeee62dcb2536a6e8b54257997934b0e420132e9d917151cd06

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