java多线程adb安装apk卡死_多线程方式安装apk

# -*- coding:utf-8 -*-

# 1.获取连接设备的机器ip

# 2.获取需要安装的apk

# 3.对每一台机器安装apk

# 4.检查apk安装是否成功

# 5.安装完成

import os,subprocess

import _thread

#获取设备ip地址,并连接

result=0

def connectDevice(dress):

'''检查设别是否连接成功,如果成功返回True,否则返回False'''

ip_dress=deviceName(dress)

for ipdressline in ip_dress:

cmd="adb connect"+" "+str(ipdressline)

print(cmd)

device_con=subprocess.getoutput(cmd)

print(device_con)

Devicecmd='adb devices'

device_str=subprocess.getoutput(Devicecmd)

device_list=[]

m=(device_str.strip('\n').strip(' ')).split('\n')

for line in m:

if 'List' not in line:

device_list.append(line.split('\t')[0])

print(device_list)

else:

print("无设备连接")

return device_list

#读取apk

def readapk(apk_path):

apkpackage=os.listdir(apk_path)

apk_list=[]

for list in apkpackage:

if '.apk' in list:

apk_list.append(list)

print("需要安装的apk是%s" % (apk_list))

return apk_list

#读取apk,安装apk

def readFile():

global result

#current=os.getcwd()

device_list = connectDevice("E:\cewen\deviceIPdress.txt")

apklist = readapk(r'E:\cewen\package')

for dev in device_list:

for apk in apklist:

apk='E:\cewen\package\\'+apk

installCmd = r'adb -s %s install -r %s ' % (dev, apk)

result =result+1

_thread.start_new_thread(manythread,(installCmd,apk))

#result = subprocess.Popen(installCmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True)

while result!=0:

pass

def manythread(installCmd,apk):

global result

print(installCmd)

print('正在安装apk包:%s' % apk)

result = subprocess.Popen(installCmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True,

universal_newlines=True)

print(result.stdout.readlines())

result=result-1

#导入设备编号

def deviceName(ipdress):

filename=open(ipdress,'r')

devicelist=[]

for readline in filename:

devicelist.append(readline.strip('\n'))

return devicelist

#connectDevice()

#print(readapk(r'G:\测温软件\apk'))

readFile()

运行时很容易有问题。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年的第一个工作日,推荐几个优质公众号

2017刚过去不久,我们迎来了2018。工作、生活节奏超快的今天,想要不断提升自我,碎片化阅读学习是你最佳的选择,如果你有一颗学习的心,那这些学习型的公众号,绝对会让你受益匪浅。小编为你精选了技术领域几个…

redis session java获取attribute_redis里的数据结构

Redis作为当前使用非常广泛的内存数据库,在代码层面做了很多极致的优化,已获取更好的性能。其中重要的一部分,就是对于底层数据结构的使用。Redis会根据数据量、数据大小等来优化对于不同结构的使用,从而获得更佳的运行效率和内存…

.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记

2.8 安全认证 VS 授权ASP .NET Core 认证授权中间件认证JWT 认证授权认证 VS 授权认证是一个识别用户是谁的过程授权是一个决定用户可以干什么的过程401 Unauthorized 未授权403 Forbidden 禁止访问ASP .NET Core 认证授权中间件在接收到请求之后,认证(A…

从Banner入手保护linux系统服务器

一,ftp服务Banner修改法: wu-ftp修改 用十六进制文本编辑器修改/usr/sbin/in.ftpd文件,找到如下几行:/var/log/lastlogCould not write %.100s:%.100sVersion wu-2.6.1-16改成:Microsoft FTP Service(Version.6…

java超长字符序列化_String 字符串最长可以有多长?

Java技术栈www.javastack.cn打开网站看更多文章String 类可以说是在 Java 中使用最频繁的类了,就算是刚刚接触 Java 的初学者也不会陌生,因为对于 Java 程序来说,main 方法就是使用一个 String 类型数组来作为参数的(String[] args)。对于这样…

一文读懂 AVL 树

背景AVL 树是一棵平衡的二叉查找树,于 1962 年,G. M. Adelson-Velsky 和 E. M. Landis 在他们的论文《An algorithm for the organization of information》中发表。所谓的平衡之意,就是树中任意一个结点下左右两个子树的高度差不超过 1。&am…

欧几里得范数_从范数到正则化

范数是一个在数学领域中常用的工具,同时也是学习机器学习原理中经常碰到的概念。本文将从范数的定义出发,逐步带你理解其在机器学习中的应用。首先需要明确的是,范数是一个函数,在机器学习中我们通常用它来衡量向量的大小。 范数定…

C++ 自定义调试信息的输出

自定义调试信息的输出调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进程则一般是使用syslog将调试信息输出到日志文件中等等...使用标准的方法打印调试信息有时候不是很…

IdentityServer4之持久化很顺手的事

前言原计划打算在春节期间多分享几篇技术文章的,但到最后一篇也没出,偷懒了吗?算是吧,过程是这样的:每次拿出电脑,在孩姥姥家的院子总有阳光沐浴,看不清屏幕,回屋又有点冷(在强行找理…

java获取下周一整周的日期_获取Java中日期范围内的所有星期五

我最近遇到了一个任务,我必须在一个日期范围内获得所有星期五.我写了一小段代码,很惊讶看到一些奇怪的行为.以下是我的代码:public class Friday {public static void main(String[]args){String start "01/01/2009";String end "12/09/2013"…

手写体识别代码_Python识别图片中的文字

一、前言不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制。或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存。但是当我们想用到里面的文字时&a…

递推与储存,是动态规划的关键

小智最近由于项目需要,经常要接触到一些规划类的问题。那今天就给大家讲一讲旅行商问题及其解法吧。旅行商问题,即TSP问题(Travelling Salesman Problem)。问题是,有一个旅行商人要拜访n个城市,每个城市只能…

SQL 标量值函数的调用

调用 MS SQL 标量值函数,应该在函数前面加上 "dbo.",否则会报 “不是可以识别的 内置函数名称”错误。例如 DECLARE WhichDB TINYINT; SELECT WhichDB dbo. user_GetWhichDB(1);--看看是哪个数据库的 另外,标量值函数就相当于…

dotnet core TargetFramework 解析顺序探索

dotnet core TargetFramework 解析顺序测试Intro现在 dotnet 的 TargetFramework 越来越多,抛开 .NET Framework 不谈,如果一个类库支持多个 TargetFramework 应用实际运行的时候会使用哪个版本的 API 呢,之前一直都是想当然的自以为是了&…

java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

转载请注明出处:http://blog.csdn.net/xdz78#include #include //查找单链表中的特定元素,《数据结构与算法——c语言描述》 3.11 答案int count;//全局变量自动初始化为0int m;//需要查找的元素大小typedef struct student {int data;struct student *n…

python调用robotframework_robotframework+python接口自动化的点滴记录(2)

1.在循环体内,赋值语句的前后名称不能一样,否则在跑循环的第二次时就会报错:TypeError: not all arguments converted during string formatting这样写是错的:${设置计划接口_请求body} string format ${设置计划接口_请求body}…

这种感觉真爽

今天接到客户的修改需求,说了一大段话,然后我们开始讨论解决方案。最后自己来负责前台的修改。看了六七个小时的代码,最后修改了一行。达到了要求。想起了以前课文中学到的一句话:画一条线1美元,知道在哪里画这条线999…

大数据时代,掌握数据分析需要做到这几点

这些年来,随着进入大数据时代,各行各业均有一个词频频被提到,那就是数据分析。那么数据分析究竟是什么呢?数据分析就是指用适当的统计分析方法对收集来的大量数据进行处理分析,提取有用信息并形成结论,从而…

93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?

背景在实际项目中redis常被应用于做缓存,分布式锁/消息队列等。但是在搭建配置好redis服务器后很多朋友应该会发现和有这样的疑问,为什么redis默认建立了16个数据库,16个数据库的由来redis是一个字典结构的存储服务器,一个redis实…

python tablewidget 颜色_QT中,QTableView鼠标移动到item上时该item所在行的背景颜色变成其他颜色,这要怎么实现...

展开全部//不解释,自己看。不保证完整,仅供思路参考#include #include "TableView.h"#include #include int main(int argc, char *argv[]){QApplication a(argc, argv);QStandardItemModel model;for ( int col 0; col {QList list;for ( in…