57 lines
2 KiB
Python
57 lines
2 KiB
Python
from datetime import datetime
|
|
import subprocess
|
|
import shlex
|
|
|
|
class Functions:
|
|
@staticmethod
|
|
def load(filename):
|
|
with open(filename, 'r') as content_file:
|
|
return content_file.read()
|
|
|
|
@staticmethod
|
|
def save(filename, contents):
|
|
with open(filename, 'w') as file:
|
|
file.write(contents)
|
|
|
|
@staticmethod
|
|
def log(source, level, message):
|
|
if message is None or message == "":
|
|
return
|
|
|
|
if not isinstance(message, (list, tuple)):
|
|
message = [message]
|
|
|
|
for line in message:
|
|
print("[%s] %s [%s]: %s" % (source, datetime.now().strftime("%x %X"), level, line.rstrip()))
|
|
|
|
@staticmethod
|
|
def run_bash(source, command, log_output=True, return_result=True):
|
|
if not isinstance(command, (list, tuple)):
|
|
command = shlex.split(command)
|
|
|
|
try:
|
|
process = subprocess.Popen(command,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
universal_newlines=True)
|
|
|
|
output = []
|
|
|
|
while True:
|
|
line = process.stdout.readline().rstrip()
|
|
output.append(line) if return_result else None
|
|
Functions.log(source, "info", line) if log_output else None
|
|
Functions.log(source, "error", process.stderr.readline())
|
|
return_code = process.poll()
|
|
if return_code is not None:
|
|
lines = []
|
|
for line in process.stdout.readlines():
|
|
output.append(line.rstrip()) if return_result else None
|
|
lines.append(line.rstrip())
|
|
Functions.log(source, "info", lines) if log_output else None
|
|
Functions.log(source, "error", process.stderr.readlines())
|
|
break
|
|
|
|
return output
|
|
except Exception as e:
|
|
Functions.log(source, 'error', "%s" % (e))
|