aios/tools/hape/hape_libs/utils/shell.py (57 lines of code) (raw):
from .logger import Logger
import subprocess
import json
class SSHShell:
def __init__(self, ip = None):
self.ip = ip
def execute_command(self, command, grep_text = None):
full_command = "ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no {} -t '{}'".format(self.ip, command)
message = '[SSH:{}] Execute command: [\n{}\n]'.format(self.ip, full_command)
Logger.debug(message)
proc = subprocess.Popen(full_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, error = proc.communicate()
try:
out, error = out.decode(), error.decode()
except:
pass
full_out = out + "\n" + error
response_message = "[SSH:{}] Command response: {}".format(self.ip, full_out)
Logger.debug(response_message)
if error.find("Permission denied")!=-1:
raise RuntimeError("Cannot execute ssh command in ip {}, detail: {}".format(self.ip, full_out))
if grep_text != None:
succ = (out.find(grep_text) != -1)
return out, succ
else:
return out
def makedir(self, abs_path):
self.execute_command("mkdir -p -m 777 {}".format(abs_path))
def exists(self, abs_path):
out, exists = self.execute_command("test -e {}; echo $?".format(abs_path), grep_text="0")
return exists
class LocalShell:
@staticmethod
def execute_command(command, daemonize = False, grep_text = None):
message = 'Execute local shell command: [{}]'.format(command)
Logger.debug(message)
proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if daemonize:
return True
out, error = proc.communicate()
try:
out, error = out.decode(), error.decode()
except:
pass
out, error = out.strip(), error.strip()
full_out = out + "\n" if len(out) !=0 else '' + error
response_message = "Local shell command response: [{}]".format(full_out)
Logger.debug(response_message)
if grep_text != None:
succ = (out.find(grep_text) != -1)
return full_out, succ
else:
return out
@staticmethod
def rsync(src_path, dest_path):
cmd = "rsync -e \"ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no\" -r {} {}".format(src_path, dest_path)
LocalShell.execute_command(cmd)