今天讲的是我在flask服务里执行adb install 命令,被坑了一天

需求是我们的安卓打包机器和我们的自动化机器不是同一台,管理人也不一样,想让每次打包后能通知到我们的服务器,然后执行后续的操作,比如安装卸载,monkey,冒烟测试用例等等

(懒癌犯了,不想在我们的自动化服务器安装编译环境,不然直接搭建编译环境,然后我们这里再启动一个jenkins就可以了)

1.flask写了一个get请求的接口,接收一个url参数,这里也为了方便测试,如果有url参数,就执行本次的流程,如果没有url参数,直接返回一个json串

@app.route('/get_consultant', methods=['POST', 'GET'])
def get_consultant():
if request.method == "GET":
url = request.args.get('url')
print(url)
if url:
page_url = processing_url(url)
print(page_url)
       。。。
     else:
     return json.dumps({'error': 'url is null'})
2.然后写了个函数处理下载APP的url和存放本地的url
def processing_pagename(url):
"""根据返回的url,判断本地有没有该文件夹,没有创建"""
id = url.split('/')[-1]
page_path = "d:\\%s" % id
if not os.path.exists(page_path):
os.mkdir(page_path)
print("下载路径:%s" % page_path)
return page_path def processing_url(url):
id = url.split('/')[-1]
url = "https://***********/**/%s/app-**-**.apk" % id
print("下载地址:%s" % url)
return url 3.接下来是是安装卸载APP的函数,就出现在这个安装函数的地方,单个运行没问题,到接口里面就安装不了
def run_install_app(page_path):
"""安装APP"""
cmd = "adb install -r %s" % page_path
print("安装命令---->", str(cmd))
adb_txt = os.popen(cmd)
# adb_txt = subprocess.check_output(cmd).decode('utf-8')
time.sleep(10)
txt = adb_txt.read()
print(txt)
if "Success" in txt:
print("安装成功")
# return True
else:
print("安装失败")
# return False
def run_uninstall_app():
"""卸载APP"""
cmd = "adb uninstall **************"
# adb_txt = subprocess.check_output(cmd).decode('utf-8') # 需要decode,不然提示类型错误
adb_txt = os.popen(cmd)
    txt = adb_txt.read()
print(txt)
if "Success" in txt:
print("卸载成功")
else:
print("卸载失败")   安装错误截图,我真的不知道怎么回事,函数路径和函数单个调试都没问题(有知道的私聊我),卸载和monkey函数都没问题

纠结了一天,临下班想起来:我为啥一定要在接口里面执行业务?围魏救赵吧,接口获取到apk并下载完成后,写入个文件,然后写个定时任务去读取这个文件(我真是个天才)

定时任务下一文章聊

在flask服务里面执行adb 安装命令的更多相关文章

  1. Android 执行 adb shell 命令

    Android 执行Adb shell 命令大多需要root权限,Android自带的Runtime. getRuntime().exec()容易出错,在网上找到了一个执行adb shell命令的类 ...

  2. 通过ant调用shell脚本执行adb命令

    在Hudson或者Jenkins中利用ant的exec 来调用shell命令,通过shell脚本来执行adb shell命令,可以正常执行,不会出现在ant中直接调用adb shell出现的假死情况. ...

  3. adb push命令的使用

    最近刚接触一种工具(命令),什么命令呢?就是adb命令,对这个命令纯属一个小白鼠,什么都不懂,所以只能adb --help 一下参数,然后就尝试着使用. 今天遇到一个问题,需要将某个文件拷到小机上面, ...

  4. adb push 和 adb pull命令

    adb push命令 :从电脑上传送文件到手机: adb pull命令 :从手机传送文件到电脑上             @Cocos 下次需要权限的目录可以执行chmod 777 目录名      ...

  5. adb devices命令链接设备失败 解决办法

    使用adb devices命令链接设备失败 1,检查adb的环境配置是否存在问题 参见我的博客(sdk配置):https://www.cnblogs.com/changpuyi/p/9459025.h ...

  6. 命令行中使用adb安装apk

    转载:http://blog.sina.com.cn/s/blog_8324d8e80101b8dn.html 在你的android—IDE中找到D:\Softwave_Ghost\技术软件\IDE\ ...

  7. linux -- 启动时启动服务或者执行命令

    运行等级 首先,我们需要知道Linux系统关于运行等级的知识.在不同的linux系统上(例如ubuntu和Fedora)这些数字与和所代表的意义可能不同,但主要的有以下几个: 单用户模式. 多用户模式 ...

  8. 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它

    无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer.Windows服务器管理工具或NET START命令启动它 1. ...

  9. 如何在python脚本里面连续执行adb shell后面的各种命令

    如何在python脚本里面连续执行adb shell后面的各种命令 adb shell "cd /data/local && mkdir tmp" adb shel ...

随机推荐

  1. 使用spring配置类代替xml配置文件注册bean类

    spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...

  2. KVM/QEMU/qemu-kvm/libvirt 概念全解

    目录 目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用 前言 如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会 ...

  3. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_3_字节输出流_OutputStream类&FileOutputStream

    都在IO包下 所有字节输出最顶层的父类 它是一个抽象类.abstract修饰的 一般这种类定义的都是所有字节流都可以使用公共的方法,

  4. 【MM系列】SAP MM模块-库存盘点BAPI的使用及注意点

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-库存盘点BAPI的 ...

  5. 嗯,python

    总觉得在这么个地方已经没有在碰blog的可能了...但是... 突然说要用python来配置环境...好歹也是这个专业的啊...还是 看看吧... 然后 百度一搜,看到一个 好的 网站,不知道 我一旦 ...

  6. TNS-01106: Listener using listener name LISTENER has already been started

    -- 启动监听,提示已经启动. [oracle@sh ~]$ lsnrctl startLSNRCTL for Linux: Version 12.1.0.2.0 - Production on 06 ...

  7. 安卓手机作为中继器-连接Wifi共享该Wifi给PC和手机

    工具 routernet.apk

  8. 浅谈vue对seo的影响

    不可否定的是,vue现在火.但是在实际项目中,特别是像一下交互网站,我们不可避免会考虑到的是seo问题,这直接关系到我们网站的排名,很多人说用vue搭建的网站不能做优化,那我们真的要放弃vue,放弃前 ...

  9. [19/05/20-星期一] CSS_css的盒子模型

    一.盒子模型 <!DOCTYPE html> <html> <!-- div 标签 块级标签 主要用来网页布局, 会将其中的子元素内容作为一个独立的整体存在 默认宽度是页 ...

  10. sql Server20008总结

    1.like------->常用于“数据库的模糊查询” 1)即:查询某个字段中含有哪些的内容的数据库的信息列表(详情) 比如:查询学生表中名字姓是‘韩’的所有学生的信息 select * fro ...