#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019-08-06 10:38 # @Author : zhouyang # @File : check_port.py ''' Appium端口自动检测是否被占用 shutdown(self,flag):禁止在一个Socket上进行数据的接受和发送。利用shutdown()函数使socket双向数据传输变为单向数据传输, shutdown()需要一个单独的参数,该参数表示了如何关闭socket 参数:0:表示禁止将来读;1:表示禁止将来写;2:表示禁止将来读和写 Appium端口自动释放 端口被占用,自动释放 ''' import socket import os def check_port(host,port): '''检测端口是否被占用''' #创建socket对象 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.connect((host,port)) s.shutdown(2) except OSError as msg: print('port %s is available'%port) print(msg) return True else: print('port %s is already use'%port) return False def relase_port(port): '''释放指定端口''' #查找指定端口对应的pid cmd_find='netstat -aon | findstr %s'%port print(cmd_find) #返回命令执行后的结果 result=os.popen(cmd_find).read() print(result) if str(port) and 'LISTENING' in result: #获取端口对应的pid进程 i=result.index('LISTENING') start=i+len('LISTENING')+7 end=result.index('\n') pid=result[start,end] #关闭被占用端口的pid cmd_kill='taskkill -f -pid %s'%pid print(cmd_kill) os.popen(cmd_kill) else: print('port %s is available'%port) if __name__ == '__main__': host='127.0.0.1' port=4725 # check_port(host,port) relase_port(port)