shellfuncs
shellfuncs copied to clipboard
Python API to execute shell functions as they would be Python functions
shellfuncs
Python API to execute functions written in shell script.
Let's assume you have a shell script counters.sh like this:
count_python_imports() {
find -name '*.py' | xargs grep -e '^import os$' -e '^import sys$' -e '^import re$' | cut -d: -f2 | sort | uniq -c
}
And you want to execute the count_python_imports
function within Python. Instead of using cumbersome subprocess wouldn't it be awesome to do something like this:
import shellfuncs
from counters import count_python_imports
returncode, stdout, stderr = count_python_imports()
Yeah, yeah, I know about easier ways of achieving the above, too. Thanks.
Why should I use that?
- use existing shell scripts in a pythonic way
- complex piping stuff might be easier to implement in shell script
- testing shell scripts is a pain in the a** - with Python it'll be easier
Installation
The recommended way to install shellfuncs is to use pip
:
pip install shellfuncs
Usage
shellfuncs can be configured on different levels.
The following configuration variables are available:
- shell (defaults to
/bin/sh
) - env (defaults to
os.environ
)
Configuration via environment variables
Set the default shell via SHELLFUNCS_DEFAULT_SHELL
environment variable:
export SHELLFUNCS_DEFAULT_SHELL=/bin/bash
Configuration via context manager
Set the configuration block-wise with a context manager:
import shellfuncs
with shellfuncs.config(shell='/bin/bash'):
from counters import count_python_imports
count_python_imports() # the shell used will be /bin/bash
Configuration for specific function call
Set the configuration when function is executed:
import shellfuncs
from counters import count_python_imports
count_python_imports(shell='/bin/bash')
This project is published under MIT.
A Timo Furrer project.
- :tada: -