Programmer friendly subprocess wrapper
Project description
The execute() function in the executor package/module is a simple wrapper for Python’s subprocess module that makes it very easy to handle subprocesses on UNIX systems with proper escaping of arguments and error checking. It’s currently tested on Python 2.6, 2.7 and 3.4. For usage instructions please refer to the documentation.
Examples of usage
Below are some examples of how versatile the execute() function is.
Checking status codes
The status code of the subprocess is returned as a boolean:
>>> from executor import execute >>> execute('true') True
If a subprocess exits with a nonzero status code an exception is raised, this makes it easy to do the right thing (i.e. check the status codes of all subprocesses without having to write a lot of repetitive code):
>>> execute('false') Traceback (most recent call last): File "executor/__init__.py", line 79, in execute raise ExternalCommandFailed, msg % (shell.returncode, command) executor.ExternalCommandFailed: External command failed with exit code 1! (command: false)
The exceptions raised by the execute() functions expose command and returncode attributes. If you know a command is likely to exit with a nonzero status code and you want execute() to simply return a boolean you can do this:
>>> execute('false', check=False) False
Getting output
Getting the output of subprocesses is really easy as well:
>>> execute('hostname', capture=True) 'peter-macbook'
Running commands as root
It’s also very easy to execute commands with super user privileges:
>>> execute('echo test > /etc/hostname', sudo=True) [sudo] password for peter: ********** True >>> execute('hostname', capture=True) 'test'
Enabling logging
If you’re wondering how prefixing the above command with sudo would end up being helpful, here’s how it works:
>>> import logging >>> logging.basicConfig() >>> logging.getLogger().setLevel(logging.DEBUG) >>> execute('echo peter-macbook > /etc/hostname', sudo=True) DEBUG:executor:Executing external command: sudo bash -c 'echo peter-macbook > /etc/hostname'
Contact
The latest version of executor is available on PyPI and GitHub. The documentation is hosted on Read the Docs. For bug reports please create an issue on GitHub. If you have questions, suggestions, etc. feel free to send me an e-mail at peter@peterodding.com.
License
This software is licensed under the MIT license.
© 2015 Peter Odding.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.