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检测服务器是否正常
Feb 16 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Python中的ConfigParser模块使用详解
May 04 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
python使用Flask操作mysql实现登录功能
May 14 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
pandas参数设置的实用小技巧
Aug 23 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
php读取文件内容的方法汇总
2015/01/24 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
python购物车程序简单代码
2018/04/18 Python
使用tensorflow实现线性回归
2018/09/08 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python中如何添加自定义模块
2020/06/09 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
20年同学聚会感言
2014/02/03 职场文书
我的梦想演讲稿
2014/04/30 职场文书
简历自荐信范文
2015/03/09 职场文书
会议通知范文
2015/04/15 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python