Python实现Appium端口检测与释放的实现


Posted in Python onDecember 31, 2020

1. 监测端口

我们要引用的socket模块来校验端口是否被占用。

1.1 socket是什么?

简单一句话:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。

1.2 socket本质是什么?

socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。

关于socket的通讯原理,我们可以参考socket通讯原理
关于socket模块内容,我们可以参考python 的socket模块文档

我们上代码,看看如何检测端口是否被使用

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-7-7
"""


import socket

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 already in use! " %port)
  return False

if __name__ == '__main__':
 host = '127.0.0.1'
 prot = 4723
 check_port(host,prot)

这里注意一点:
shutdown(self,flag):禁止在一个Socket上进行数据的接收和发送。
利用shutdown()函数,使双向数据传输变为单向数据传输。

参数:
>0表示禁止将来读;
>1表示禁止将来写
>2表示禁止将来读和写。

我们来看看代码执行结果:

如下图状态,说明服务器没有开启这个端口服务,所以这个端口是可以使用!

Python实现Appium端口检测与释放的实现

2. 释放端口

如果端口被占用,我们就需要释放它。
那如何释放端口呢,?
有两种方法:
1.cmd窗口 释放 端口;
2.python代码释放端口。

2.1 cmd 释放端口

1、先查找我们要需要的端口号

netstat -aon | findstr "5037"

Python实现Appium端口检测与释放的实现

2、通过端口号,查找pid,然后杀死进程

taskkill -f -pid 18028

2.2 Python代码释放端口

那如果在python里面,如何实现呢?
我们看代码:

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-7-7
"""
import os

def release_port(port):
 "释放指定端口"

 #查找端口对应的pid
 cmd_find = 'netstat -ano | 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')
  # 'LISTENING'与端口号之间相隔7个空格
  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 = 4723
 release_port(port)

我们来瞅瞅,运行结果是啥:

Python实现Appium端口检测与释放的实现

说明4723这个端口,是可用的。
这里再说一句:
os.popen() :就是要打开一个管道,获取输入到cmd控制台的信息。
更详细的内容,可以参考pyhton的os.popen()官方文档
当然,如果想飞速了解os.popen()与os.system()
可以参照这篇《调用系统命令 os.system()和os.popen() 》文章。

到此这篇关于Python实现Appium端口检测与释放的实现的文章就介绍到这了,更多相关Python Appium端口检测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python执行外部程序的常用方法小结
Mar 21 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
python 查找字符串是否存在实例详解
Jan 20 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
python——全排列数的生成方式
Feb 26 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
python 基于selectors库实现文件上传与下载
Dec 31 #Python
python中Mako库实例用法
Dec 31 #Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 #Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 #Python
python 检测nginx服务邮件报警的脚本
Dec 31 #Python
Django 实现图片上传和下载功能
Dec 31 #Python
Python wordcloud库安装方法总结
Dec 31 #Python
You might like
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
Jquery练习之表单验证实现代码
2010/12/14 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
理解javascript封装
2016/02/23 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
js canvas实现橡皮擦效果
2018/12/20 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Python面向对象编程之继承与多态详解
2018/01/16 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
视图的作用
2014/12/19 面试题
公司经理聘任书
2014/03/29 职场文书
安全承诺书格式
2014/05/21 职场文书
小学亲子活动总结
2014/07/01 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2014年行政工作总结
2014/11/19 职场文书
店面出租协议书范本
2014/11/28 职场文书
售后服务承诺函格式
2015/01/21 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
Python Matplotlib绘制条形图的全过程
2021/10/24 Python