大道之行,天下为公。这篇文章主要讲述appium--自动检测端口和释放端口相关的知识,希望能为你提供帮助。
检测端口
当端口被其他服务占用时,如果我们还启动这个端口,则会报错,所以很有必要在使用这个端口时,先来检测一下这个端口有没有被其他服务使用。
端口检测需要用到socket模块来校验端口是否被占用
什么是socket?
网络上的两个程序通信,底层都是使用socket来实现的。socket的本质是编程接口,对TCP/IP的封装。
shutdown(flag)
禁止在
一个socket上进行数据的接收与发送,利用shutdown函数使socket双向数据传输变为单项数据传输,
shutdown()需要一个单独的参数,该参数表示如果关闭socket
- 0表示禁止以后读
- 1表示禁止以后写
- 2表示禁止以后读和写
import socketdef check_port(host, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((host, port)) s.shutdown(2) except OSError as e: print(\'端口没有被其他服务占用,可以使用\') print(e) else: print(\'端口被其他服务占用了\')if __name__ == \'__main__\': check_port(host=\'127.0.0.1\', port=4723)# port不能是字符串
当我们启动appium服务,并且端口是4723时,提示我们
端口被其他服务占用了
当端口没有被其他服务使用时提示
端口没有被其他服务占用,可以使用 [WinError 10061] 由于目标计算机积极拒绝,无法连接。
这时候我们就可以使用4723端口了
自动释放端口
前面我们说了关闭端口的两种方式,第一种是在资源管理器中关闭,第二种是使用命令关闭,不管是哪种方式,都需要我们手动去执行,对于做自动化的老司机来说,这肯定不行的,接下来让我们使用脚本来关闭
import os# 释放端口 def release_port(port): # 执行命令 cmd_find = \'netstat -aon | findstr %s\' % (port) print(\'cmd_find\', cmd_find)# 返回执行后的结果 res = os.popen(cmd_find).read() print(\'res\', res)if str(port) and \'LISTENING\' in res: # 获取端口的pid i = res.index(\'LISTENING\') # LISTENTING的索引 start = i + len(\'LISTENING\') + 7 end = res.index(\'\\n\') pid = res[start:end] print(\'pid:\', pid)# 关闭被占用端口的pid cmd_kill = \'taskkill -f -pid %s\' % (pid) print(\'cmd_kill:\', cmd_kill) os.popen(cmd_kill)# 关闭端口 else: print(\'当前端口是可以使用的\')if __name__ == \'__main__\': release_port(4727)
结果:
cmd_find netstat -aon | findstr 4727 resTCP0.0.0.0:47270.0.0.0:0LISTENING3056pid: 3056 cmd_kill: taskkill -f -pid 3056
文章图片
【appium--自动检测端口和释放端口】
推荐阅读
- Android studio的第一次动手
- Android学习03
- APP测试-内存测试
- android开发实战-记账本APP
- 寒假学习进度三——安卓的一些基本组件
- 如何在Windows或Linux中创建端口监听器–方便进行连接测试
- 用于中间件/WebSphere管理的Linux命令
- Linux中的Crontab –带有实时示例和工具
- 有用的Linux查找系统管理员命令