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高手之路python处理excel文件(方法汇总)
Jan 07 Python
python学习之编写查询ip程序
Feb 27 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
python用match()函数爬数据方法详解
Jul 23 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
Python安装OpenCV的示例代码
Mar 05 Python
Python csv文件记录流程代码解析
Jul 16 Python
python中selenium库的基本使用详解
Jul 31 Python
python3美化表格数据输出结果的实现代码
Apr 14 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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP Session机制简介及用法
2014/08/19 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
php桥接模式应用案例分析
2019/10/23 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
python中列表元素连接方法join用法实例
2015/04/07 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
Python 文件管理实例详解
2015/11/10 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
python中常用的数据结构介绍
2021/01/12 Python
高中毕业自我鉴定
2013/12/22 职场文书
科研先进个人典型材料
2014/01/31 职场文书
2014年班务工作总结
2014/12/02 职场文书
世界地球日活动总结
2015/02/09 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js