使用逍遥模拟器监控模拟器中某app是否正常正常运行

代码如下
# /usr/bin/python3
# -*-coding:utf8-*-
"""
功能:监控模拟器是否运行正常
"""
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"
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 {} {}"  # 启动模拟器中指定的app程序
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值