Skip to main content

High-level command-line abstraction

Project description

Scriptor

Run command-line programs in Python


Pypi version build codecov Documentation Status PyPI pyversions

What is it?

Scriptor is a high-level library for command-line. Scriptor makes it easy to integrate other CLI programs to your Python application.

Core features:

  • Run programs sync or async using the same syntax
  • High-level program abstraction
  • Easy program parametrization

Install it from PyPI:

pip install scriptor

Why Scriptor?

Scriptor abstracts subprocess and asyncio.subprocess to the same syntax making it easy to use both of them and switch between.

>>> from scriptor import Program
>>> python = Program("python3")

>>> # Call the program (and wait for finish)
>>> python("myscript.py")

More Examples

Here are some examples:

>>> # Parametrize a script
>>> python("myscript.py", report_date="2022-11-11")

>>> # Use different current working directory
>>> python.use(cwd="path/to/dir")("myscript.py")

>>> # Run script with output (in stdout)
>>> python("print_hello.py")
'Hello world'

>>> # Run failing script
>>> python("failing.py")
Traceback (most recent call last):
...
scriptor.process.ProcessError: Traceback (most recent call last):
  File "failing.py", line 1, in <module>
    raise RuntimeError("Oops!")
RuntimeError: Oops!

Start a process:

>>> process = python.start("print_hello.py")
>>> process.finished
False

>>> # Wait for the process to finish
>>> process.wait()

>>> # Raise error if process failed
>>> process.raise_for_return()

>>> # Read the results
>>> process.read()
'Hello world'

Some more examples with async:

>>> # Parametrize a script
>>> await python.call_async("myscript.py", report_date="2022-11-11")

>>> # Run script with output (in stdout)
>>> await python.call_async("print_hello.py")
'Hello world'

Start with async:

>>> process = await python.start_async("print_hello.py")
>>> process.finished
False

>>> # Wait for the process to finish
>>> process.wait()

>>> # Raise error if process failed
>>> process.raise_for_return()

>>> # Read the results
>>> process.read()
'Hello world'

Change settings ie. the current working directory:

>>> git = Program('git')
>>> repo_1 = git.use(cwd="path/to/repo_1")
>>> repo_2 = git.use(cwd="path/to/repo_2")
>>> repo_1("status")
"""On branch main
nothing to commit, working tree clean"""

See more from the documentation.

If the library helped you, consider buying a coffee for the maintainer ☕.

Author

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

scriptor-0.2.0.tar.gz (113.2 kB view hashes)

Uploaded source

Built Distribution

scriptor-0.2.0-py3-none-any.whl (15.3 kB view hashes)

Uploaded py3

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