Source code for speechbrain.utils.superpowers

"""Superpowers which should be sparingly used.

This library contains functions for importing python files and
for running shell commands. Remember, with great power comes great

 * Mirco Ravanelli 2020
 * Aku Rouhe 2021

import logging
import subprocess
import importlib
import pathlib

logger = logging.getLogger(__name__)

[docs]def import_from_path(path): """Import module from absolute path Arguments --------- path : str, pathlib.Path The path to the module to import Returns ------- module The loaded module Implementation taken from: """ path = pathlib.Path(path) modulename = path.with_suffix("").name spec = importlib.util.spec_from_file_location(modulename, path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module
[docs]def run_shell(cmd): """This function can be used to run a command in the bash shell. Arguments --------- cmd : str Shell command to run. Returns ------- bytes The captured standard output. bytes The captured standard error. int The returncode. Raises ------ OSError If returncode is not 0, i.e., command failed. Example ------- >>> out, err, code = run_shell("echo 'hello world'") >>> _ = out.decode(errors="ignore") """ # Executing the command p = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) # Capturing standard output and error (output, err) = p.communicate() if p.returncode != 0: raise OSError(err.decode(errors="replace")) # Adding information in the logger msg = output.decode(errors="replace") + "\n" + err.decode(errors="replace") logger.debug(msg) return output, err, p.returncode