platypush/platypush/plugins/shell/__init__.py

40 lines
1.3 KiB
Python
Raw Permalink Normal View History

2017-10-31 09:20:35 +01:00
import subprocess
from platypush.plugins import Plugin, action
2017-10-31 09:20:35 +01:00
class ShellPlugin(Plugin):
2018-06-25 19:57:43 +02:00
"""
Plugin to run custom shell commands.
"""
@action
def exec(self, cmd, background=False, ignore_errors=False):
2018-06-25 19:57:43 +02:00
"""
Execute a command.
:param cmd: Command to execute
:type cmd: str
:param background: If set to True, execute the process in the background, otherwise wait for the process termination and return its output (deafult: False).
:param ignore_errors: If set, then any errors in the command execution will be ignored. Otherwise a RuntimeError will be thrown (default value: False)
2018-06-25 19:57:43 +02:00
:returns: A response object where the ``output`` field will contain the command output as a string, and the ``errors`` field will contain whatever was sent to stderr.
"""
if background:
subprocess.Popen(cmd, shell=True)
2017-10-31 09:20:35 +01:00
try:
return subprocess.check_output(
cmd, stderr=subprocess.STDOUT, shell=True).decode('utf-8')
2017-10-31 09:20:35 +01:00
except subprocess.CalledProcessError as e:
if ignore_errors:
self.logger.warning('Command {} failed with error: {}'.format(
cmd, e.output.decode('utf-8')))
else:
raise RuntimeError(e.output.decode('utf-8'))
2017-10-31 09:20:35 +01:00
# vim:sw=4:ts=4:et: