import json import subprocess import shlex import string import random def get_ctrinfo(): with open("/etc/ctrinfo.json", "r") as f: ctrinfo = json.load(f) return ctrinfo def subprocess_run(cmd): """ 外部コマンドを実行する 引数で指定された文字列は内部でエスケープ処理されてから実行される Parameters ---------- cmd : str 実行するコマンドの文字列 Returns ------- dict コマンドの実行結果コード、標準出力、標準エラーを格納し返す 例外発生時は例外をraiseする """ try: escape_list = ["\\", "$", "\"", "`"] # コマンド文字列のエスケープ処理 escaped_cmd = "" for tmp_text in cmd: if tmp_text in escape_list: escaped_cmd = escaped_cmd + "\\" + tmp_text else: escaped_cmd = escaped_cmd + tmp_text # コマンド実行 args = shlex.split(escaped_cmd.strip()) cmd_ret = subprocess.Popen( args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (output, err) = cmd_ret.communicate() status = cmd_ret.poll() # 戻り値格納 ret_dict = {} ret_dict["retcode"] = status ret_dict["stdout"] = output ret_dict["stderr"] = err return ret_dict except Exception as e: ret_dict = {} ret_dict["retcode"] = 1 ret_dict["stdout"] = '' ret_dict["stderr"] = str(e) return ret_dict def random_str(n): """ 大英字、小英字、数字のランダム文字列を返す関数 Parameters ---------- n : int 桁数 Returns ------- str 指定した桁数の文字列 """ return ''.join(random.choices(string.ascii_letters + string.digits, k=n))