Module libwine.utils.command
Expand source code
import subprocess
from os import path, mkdir, environ
class Command:
'''
Create a new object of type Command that can be used to run commands.
Parameters
----------
command : str
the command to be executed
cwd: str, optional
full path to the working directory
envs: dict, optional
dict of environment variables to pass on the execution
Raises
------
Exception
If the command execution fail.
'''
_command = str
_cwd = "/tmp"
_envs = {}
def __init__(self, command: str, cwd: str = None, envs: dict = None):
self._command = command
self._envs = environ.copy()
self._envs["PATH"] = "/usr/sbin:/sbin:" + self._envs["PATH"]
if cwd is not None:
if not path.exists(cwd):
try:
mkdir(cwd)
self._cwd = cwd
except PermissionError: # the /tmp path will be used
pass
if envs is not None:
self._envs = {**self._envs, **envs}
def execute(self, comunicate: bool = False):
'''
Execute the command.
Parameters
----------
comunicate : bool, optional
to get the output of the command (default is False)
Returns
-------
subprocess.Popen object
the subprocess object
str
the command output if comunicate is set to True
bool
False if the command fail on execution
Raises
-------
Exception
if command not found
'''
command = self._command
command = command.split(" ")
try:
proc = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
cwd=self._cwd,
env=self._envs
)
except FileNotFoundError:
raise Exception("Command not found")
except OSError:
return False
if comunicate:
return proc.communicate()[0].decode("utf-8")
return proc
def comunicate(self):
'''
Execute the command and get the output
'''
return self.execute(comunicate=True)
Classes
class Command (command: str, cwd: str = None, envs: dict = None)
-
Create a new object of type Command that can be used to run commands.
Parameters
command
:str
- the command to be executed
cwd
:str
, optional- full path to the working directory
envs
:dict
, optional- dict of environment variables to pass on the execution
Raises
Exception
- If the command execution fail.
Expand source code
class Command: ''' Create a new object of type Command that can be used to run commands. Parameters ---------- command : str the command to be executed cwd: str, optional full path to the working directory envs: dict, optional dict of environment variables to pass on the execution Raises ------ Exception If the command execution fail. ''' _command = str _cwd = "/tmp" _envs = {} def __init__(self, command: str, cwd: str = None, envs: dict = None): self._command = command self._envs = environ.copy() self._envs["PATH"] = "/usr/sbin:/sbin:" + self._envs["PATH"] if cwd is not None: if not path.exists(cwd): try: mkdir(cwd) self._cwd = cwd except PermissionError: # the /tmp path will be used pass if envs is not None: self._envs = {**self._envs, **envs} def execute(self, comunicate: bool = False): ''' Execute the command. Parameters ---------- comunicate : bool, optional to get the output of the command (default is False) Returns ------- subprocess.Popen object the subprocess object str the command output if comunicate is set to True bool False if the command fail on execution Raises ------- Exception if command not found ''' command = self._command command = command.split(" ") try: proc = subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self._cwd, env=self._envs ) except FileNotFoundError: raise Exception("Command not found") except OSError: return False if comunicate: return proc.communicate()[0].decode("utf-8") return proc def comunicate(self): ''' Execute the command and get the output ''' return self.execute(comunicate=True)
Methods
def comunicate(self)
-
Execute the command and get the output
Expand source code
def comunicate(self): ''' Execute the command and get the output ''' return self.execute(comunicate=True)
def execute(self, comunicate: bool = False)
-
Execute the command.
Parameters
comunicate
:bool
, optional- to get the output of the command (default is False)
Returns
subprocess.Popen object
- the subprocess object
str
- the command output if comunicate is set to True
bool
- False if the command fail on execution
Raises
Exception
- if command not found
Expand source code
def execute(self, comunicate: bool = False): ''' Execute the command. Parameters ---------- comunicate : bool, optional to get the output of the command (default is False) Returns ------- subprocess.Popen object the subprocess object str the command output if comunicate is set to True bool False if the command fail on execution Raises ------- Exception if command not found ''' command = self._command command = command.split(" ") try: proc = subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self._cwd, env=self._envs ) except FileNotFoundError: raise Exception("Command not found") except OSError: return False if comunicate: return proc.communicate()[0].decode("utf-8") return proc