Skip to main content

Finally, a subprocess type that streams out stdout/stderr easily

Win_Tests Ubuntu_Tests MacOS_Tests

Capturing the stderr AND stdout from a process in python is not that easy. This class makes this capturing much easier by delegating the line capturing to seperate threads. This capture can be totally in memory or can optionally be streamed to a output stream such as a file handle.

This class will unconditionally launch a shell command and the input will always be string, not an array like what is accepted by subprocess.Popen().

Example:

Super simple example:

from capturing_process import CapturingProcess

out_stream = StringIO()
p = CapturingProcess("echo hi", stdout=out_stream)
p.wait()
self.assertIn("hi", out_stream.getvalue())
self.assertIn("hi", p.get_stdout())

For splitting the output to stdout and a file you'd write a stream class like so:

import logging
class MyStream:
    def __init__(self) -> None:
        pass

    def write(self, data: str) -> None:
        logging.info(data.rstrip('\n'))
        print(data, end="")


out_stream = MyStream()
proc = CapturingProcess("echo hi", stdout=out_stream)
proc.wait()  # Output will be captured in logging file and stdout

To silence an output stream (stdout/stderr) drop a StringIO object as an argument to the CapturingProcess like so:

If you want the entire stdout/stderr bytes

proc.get_stdout()
proc.get_stderr()

Python version: 3.6+

Because of the use of type annotations, this library is not compatible with python 2.7 However you are free to strip out these type annotations and this project should work pretty well.

Links:

Versions

  • 1.0.9: stdout/stderr threads are now forcefully killed within .1 second if they don't join.
  • 1.0.8: Fixes CapturingProcess.kill blocking if the stdout and stderr threads fail to join.

Metadata

Release files for capturing-process 1.0.13

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

Source distribution (sdist)

Source distribution for capturing-process 1.0.13
File Size Uploaded
capturing_process-1.0.13.tar.gz 6.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for capturing-process 1.0.13
File Interpreter ABI Platform
capturing_process-1.0.13-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 13.1 kB

Release files / capturing_process-1.0.13.tar.gz

Download URL capturing_process-1.0.13.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4eb6d2806d68826f62ce509c0253ba46845418c2b75f562e43da37f3d1306a5b
BLAKE2b-256 checksum
How to use checksums
680cee2ddde6d9e4de7752ce899ee7d9aa836834161086ce47fefb793603a341
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.10.10

Release files / capturing_process-1.0.13-py2.py3-none-any.whl

Download URL capturing_process-1.0.13-py2.py3-none-any.whl
Size 6.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
b2b02c17aad6b304bea31673420db254a9154c9ecf07fcfb1829221cd8fb3eae
BLAKE2b-256 checksum
How to use checksums
b264a41cde56f82360249b3e71950e7a1a96a76b73e96f77c54f4d4fd24f6682
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.10.10

Release history Release notifications | RSS feed

This release

1.0.13 This release

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.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