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中使用成员运算符的示例
May 13 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
Jul 04 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
利用python将图片转换成excel文档格式
Dec 30 Python
python编程培训 python培训靠谱吗
Jan 17 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
深入解析神经网络从原理到实现
Jul 26 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
opencv python如何实现图像二值化
Feb 03 Python
Python collections.deque双边队列原理详解
Oct 05 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
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
$()JS小技巧
2007/07/21 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
js实现各浏览器全屏代码实例
2018/07/03 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
家长学校实施方案
2014/03/15 职场文书
《分一分》教学反思
2014/04/13 职场文书
工地宣传标语
2014/06/18 职场文书
校本教研活动总结
2014/07/01 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
初二数学教学反思
2016/02/17 职场文书
Python必备技巧之函数的使用详解
2022/04/04 Python