经常出现下面的错误:

E:\>adb devices
adb server is out of date.  killing...
ADB server didn't ACK
* failed to start daemon *
error: unknown host service

相信很多人都遇到过,解决办法:

netstat -ano | findstr 5037 | findstr LISTENING

然后再 kill 掉该进程,但很烦的是有时候杀掉了也没用,原因就是启动的 adb 进程不是 sdk 下的,而是一些应用软件的。我是下午用了下阿里旺旺,就出现了这个问题。最后只能找到进程,然后找到进程所在文件,删掉其自带的 adb 程序。。

对我这个懒货来讲,对于经常碰到的问题,每次都这样去解决就嫌太麻烦,有同学经常说学了 python 也不知道干嘛,接下来就用 python 进行偷懒,需求是找到占用 5037 端口的进程,找到进程后直接打开创建该进程的文件,其所在的文件夹(用于确认是否需要删除掉该文件夹),同事 kill 掉占用该端口的进程。这里获取进程所在路径用到了 wmic。

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

import os
import platform

#5037端口占用时,打开该进程路径,且杀掉占用该端口的进程(只支持Windows)

def win():
    pid = os.popen("netstat -ano | findstr 5037 | findstr  LISTENING").read().split()[-1]

    #下面的命令执行结果,可能因电脑而异,若获取adb.exe时出错,可自行调试!
    #E:\>tasklist /FI "PID eq 10200"
    #
    #Image Name                     PID Session Name        Session#    Mem Usage
    #========================= ======== ================ =========== ============
    #adb.exe                      10200 Console                    1      6,152 K

    process_name = os.popen('tasklist /FI "PID eq %s"' %pid).read().split()[-6]

    #获取进程路径
    process_path = os.popen('wmic process where name="%s" get executablepath' %process_name).read().split("\r\n")[1]
    #分割路径,得到进程所在文件夹名
    name_list = process_path.split("\\")
    del name_list[-1]
    directory = "\\".join(name_list)
    #打开进程所在文件夹
    os.system("explorer.exe %s" %directory)
    #杀死该进程
    os.system("taskkill /F /PID %s" %pid)

if __name__ == "__main__":
    win()


↙↙↙阅读原文可查看相关链接,并与作者交流