Skip to main content

Some helpers to make interacting with the shell easier

Project description

https://img.shields.io/pypi/v/shell_utils.svg https://img.shields.io/travis/knowsuchagency/shell-utils.svg Updates https://img.shields.io/badge/License-Apache%202.0-blue.svg

Some helpers to make interacting with the shell easier

Installation

pipenv install shell-utils

Usage

def test_shell_capture():
    """Test shell output capture."""

    string = 'hello'

    echo_string = shell(f'echo {string}', capture=True)

    assert echo_string.returncode == 0
    assert echo_string.stdout.decode().strip() == string

    to_stderr = shell(f'echo "{string}" >&2', capture=True)

    assert to_stderr.returncode == 0
    assert to_stderr.stderr.decode().strip() == string


def test_shell_raises():
    """Test shell raises."""
    import subprocess as sp

    with pytest.raises(sp.CalledProcessError):
        shell('exit 1')

    assert shell('exit 1', check=False).returncode == 1


def test_env():
    """Test env context manager."""
    import os
    import copy

    original_env = copy.deepcopy(os.environ)
    string = 'world'

    with env(hello=string):
        assert os.environ['hello'] == string

    assert 'hello' not in os.environ
    assert os.environ == original_env


def test_path():
    """Test path context manager."""
    from pathlib import Path
    from tempfile import TemporaryDirectory
    import os

    original_path = Path(os.environ['PATH'])

    with TemporaryDirectory() as temp_dir, path(temp_dir) as new_path:
        temp_dir = Path(temp_dir)

        assert new_path[-1] == temp_dir.__fspath__()
        assert Path(os.environ['PATH']) != original_path

    assert Path(os.environ['PATH']) == original_path

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-utils-0.5.0.tar.gz (8.3 MB view hashes)

Uploaded Source

Built Distribution

shell_utils-0.5.0-py3-none-any.whl (8.8 kB view hashes)

Uploaded Python 3

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