Skip to main content

Configurable shell command execution in Python

Project description

shpyX - Configurable shell command execution in Python

Installation

Install with pip:

pip install shpyx

Usage

Run a command:

>>> import shpyx
>>> shpyx.run("echo 'Hello world'")
ShellCmdResult(cmd="echo 'Hello world'", stdout='Hello world\n', stderr='', all_output='Hello world\n', return_code=0)

Run a command and print the output:

>>> shpyx.run("echo 'Hello world'", log_output=True)
Hello world
ShellCmdResult(cmd="echo 'Hello world'", stdout='Hello world\n', stderr='', all_output='Hello world\n', return_code=0)

Get partial output during long commands:

>>> result = shpyx.run("echo 'Hello'; sleep 10000", log_output=True)
Hello

Motivation

Running shell commands in Python is often useful when the user is interested in combining shell and Python logic, or managing the outcome of shell commands in Python.

The Python standard library provides a simple way of doing so via the subprocess module:

import subprocess

cmd = "ls -l"
p = subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
cmd_stdout, cmd_stderr = p.communicate()

While this is sufficient for many cases, we might also want to:

  • Inspect the return code
  • See live command output (while it is being run)
  • Gracefully handle commands that are stuck (due to blocking I/O, for example)
  • Add formatted printing of every executed command and/or its output

The goal of this project is to provide a friendly API for running shell commands, with emphasis on configurability.

You might also want to check out other packages that deal with similar problems, like bash or invoke.

Security

The call to subprocess.Popen in this library uses shell=True which means that an actual system shell is being created. Untrusted commands should be checked twice before being run.

For more info, see security considerations.

Contributing

Running the linters:

docker-compose up --build linters

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

shpyx-0.0.5.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

shpyx-0.0.5-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file shpyx-0.0.5.tar.gz.

File metadata

  • Download URL: shpyx-0.0.5.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for shpyx-0.0.5.tar.gz
Algorithm Hash digest
SHA256 689985fec03eaba456f88b61ffb8469053987aa254aeb13aa076cbf8095302a7
MD5 d32289b669cb94d394d3617cde58d210
BLAKE2b-256 7fbdef0711df027917ee63a808c81cb1700b563cf5be0731cfcf320279c0fbd0

See more details on using hashes here.

File details

Details for the file shpyx-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: shpyx-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for shpyx-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 07afe332ab3e93582fd191101f7c9ef342bf5444b7b1449f5ee39bde0f72bb1c
MD5 3445ddee4f6b9612e1609228eacbb03e
BLAKE2b-256 02a0a5c64ae5e98cee8d9a29f83a85a0c0c80cc4783406da2d83a114e6b4be06

See more details on using hashes here.

Supported by

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