代码如下
"""
功能:监控模拟器是否运行正常
"""
from collections import *
import subprocess
import time
MEMUC_PATH = "D:/software/virtual-machine/xiaoyao/MEmu/memuc"
ADB_PATH = "D:/software/virtual-machine/xiaoyao/MEmu/adb"
start_vm = "start -i {}"
list_vms = "listvms --running"
stopall_vm = "stopall"
start_app = "startapp -i {} {}"
is_vm_running = "isvmrunning -i {}"
forward = "-s 127.0.0.1:215{}3 forward tcp:{} tcp:{}"
index_app = {
"1": "com.smile.gifmaker/com.yxcorp.gifshow.HomeActivity",
}
index_port = {
"1": "5001|5000"
}
def run_cmd(path, cmd):
"""
执行cmd命令
:param cmd:
:return:
"""
cmd_list = cmd.split(" ")
run_cmd_list = [path] + cmd_list
try:
result = subprocess.check_output(run_cmd_list, shell=False)
except:
pass
result = result.decode("gbk")
return result
def get_running_vms(cmd):
"""
获取正在运行的模拟器的index
:param cmd:
:return:
"""
result = run_cmd(MEMUC_PATH, cmd)
vms_list = result.split("\r\n")
if len(vms_list) > 2:
vms_list = vms_list[:-2]
return vms_list
def forward_port(index):
port_list = index_port[index].split("|")
port1 = port_list[0]
port2 = port_list[1]
cmd = forward.format(index, port1, port2)
run_cmd(ADB_PATH, cmd)
def open_vm_app(index, app):
"""
打开模拟机后打开对应的app
:param index:
:param app:
:return:
"""
while True:
run_cmd(MEMUC_PATH, start_vm.format(index))
is_vm_running1 = run_cmd(MEMUC_PATH, is_vm_running.format(index)).strip()
if is_vm_running1 == "Running":
break
time.sleep(2)
while True:
is_success = run_cmd(MEMUC_PATH, start_app.format(index, app))
if "SUCCESS" in is_success:
break
time.sleep(2)
forward_port(index)
def main():
vms_running = get_running_vms(list_vms)
if not vms_running:
for index, app in index_app.items():
open_vm_app(index, app)
else:
vms_index = []
for vm in vms_running:
vm_params = vm.split(",")
vm_index = vm_params[0]
vms_index.append(vm_index)
if vms_index == [x for x in index_app.keys()]:
pass
else:
for vm_index1 in index_app.keys():
if not vm_index1 in vms_index:
app_name = index_app[vm_index1]
open_vm_app(vm_index1, app_name)
if __name__ == '__main__':
while True:
main()
time.sleep(40)