Windows下如何获取与手机设备有关的进程信息(Python版)
2016-06-02 11:07
621 查看
当电脑上插有多台手机,我们对手机进行自动化测试,必然会执行adb shell命令,有时代码不能很好的对adb进程进行回收,导致电脑上会残留大量的adb进程,每个adb进程都会占用电脑少量内存,adb数量多的时候,占用的内存也是惊人的,会导致电脑响应速度变慢等问题。因此,我们需要定期将电脑上的adb进程给杀死掉。
现在我们面临一个问题,如何杀死一台手机的adb命令而不影响另外一台手机的adb shell命令的正常执行呢?一台机器我们可以执行如下代码:
那么,我们有没有办法获取这些adb进程详细信息呢?答案是肯定的。可以通过psutil这个模块来搞定。在Python代码中,我们使用import psutil即可。但是导入这个模块时,我们必须安装该模块,我使用的是psutil-3.4.2.win32-py3.3.exe,这个应用程序名字比较特别,但又充分显示其信息。psutil-3.4.2表明psutil的版本为3.4.2,在Windows
32位环境下使用,相应的Python应用程序版本为3.3,不然使用的时候会出错,这个就不再详细说明。
话不多说,我们直接贴代码:
shell进程的正常执行。
目前为止,我讲完了,今后大家如果想获取与设备进程相关的信息,或者想对进程进程控制,都可以使用该文的相关方法。
现在我们面临一个问题,如何杀死一台手机的adb命令而不影响另外一台手机的adb shell命令的正常执行呢?一台机器我们可以执行如下代码:
os.system('taskkill /IM adb.exe /F')这行代码会杀死所有的adb进程。如果是多台手机设备,会对其他的机器产生影响。我们在任务管理器里面对进程选择管理行,那样我们就能看到adb进程详细的信息,如下图所示:
那么,我们有没有办法获取这些adb进程详细信息呢?答案是肯定的。可以通过psutil这个模块来搞定。在Python代码中,我们使用import psutil即可。但是导入这个模块时,我们必须安装该模块,我使用的是psutil-3.4.2.win32-py3.3.exe,这个应用程序名字比较特别,但又充分显示其信息。psutil-3.4.2表明psutil的版本为3.4.2,在Windows
32位环境下使用,相应的Python应用程序版本为3.3,不然使用的时候会出错,这个就不再详细说明。
话不多说,我们直接贴代码:
def killDevicePid(device): filterstr1='adb' filterstr2=device for proc in psutil.process_iter(): try: pinfo = proc.as_dict(attrs=['pid', 'name']) pid = pinfo['pid'] if ((filterstr1 in proc.cmdline()) and (filterstr2 in proc.cmdline())): # print(filterstr) killcmd = 'taskkill /PID ' + str(pid) + ' /F' try: os.system(killcmd) print(killcmd) except OSError as e: print('no process.') except psutil.NoSuchProcess: pass except ProcessLookupError: pass except psutil.AccessDenied: pass finally: del pinfo del proc其中,device为机器的设备号,我们根据设备号来杀死相应机器的所有adb进程。psutil.process_iter()这个是获取到电脑上所有进程信息,然后对其进程遍历,得到各个进程的pid和name。proc.cmdline()为进程的命令行信息,如上图所示,我们可以判断该命令行信息是否含有机器设备号和adb进程,如果都含有的话,我们可以通过taskkill命令和adb进程的pid来杀死adb进程。这样,我们就能对某一台设备的adb进程进行kill,而不影响其他设备的adb
shell进程的正常执行。
目前为止,我讲完了,今后大家如果想获取与设备进程相关的信息,或者想对进程进程控制,都可以使用该文的相关方法。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories