#! /usr/bin/env python3 #=============================== # # base # # 2019/02/07 Kuninori Morimoto #=============================== import os import re import subprocess #==================================== # # base # # it supports do/run/run1 for using external command # #==================================== class base: __top = os.path.abspath(__file__ + "/../../"); __key = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" __bsp = ["bsp51x", "bsp41x", "bsp39x"] #-------------------- # chomp #-------------------- def chomp(self, text): return re.sub(r"\n$", r"", text); #-------------------- # top() #-------------------- def top(self): return base.__top; #-------------------- # bsp_list() #-------------------- def bsp_list(self): return base.__bsp; #-------------------- # is_key() #-------------------- def is_key(self, key): return re.match(base.__key, key); #-------------------- # color #-------------------- def color(self, color, text): return "\033[{}m{}\033[0m".format(self.config(color), text) #-------------------- # do() # # do command #-------------------- def do(self, command): return subprocess.run(command, shell=True).returncode; #-------------------- # tolist() #-------------------- def tolist(self, string): if (len(string) > 0): return string.split('\n'); return []; #-------------------- # run() # # run command and get result as plane text #-------------------- def run2(self, command): # Ughhhh # I don't like python external command !! # (ノ `Д´)ノ go away !! child = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) stdout, stderr = child.communicate() return self.chomp(stdout.decode("utf-8")), child.returncode; def run(self, command): return self.run2(command)[0] #-------------------- # run1() # # run command and get result as list #-------------------- def runl(self, command): # call run() and exchange result as array # # "xxxxxxx # yyyyyyy # zzzzzzz" # -> # ["xxxxxxx", # "yyyyyyy", # "zzzzzzz"] return self.tolist(self.run(command)); #-------------------- # config() # # read settings from config #-------------------- def config(self, item): if (not os.path.exists("{}/.config".format(self.top()))): print("\nplease copy .config.sample to .config\n" + "and edit it for your environment\n"); exit(); config = self.run("grep {} {}/.config | cut -d : -f2".\ format(item, self.top())); return self.chomp(config);