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中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python环境下安装使用异步任务队列包Celery的基础教程
May 07 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
python抓取需要扫微信登陆页面
Apr 29 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
python爬取本站电子书信息并入库的实现代码
Jan 20 Python
python实现录屏功能(亲测好用)
Mar 02 Python
python 检测图片是否有马赛克
Dec 01 Python
Python3使用Selenium获取session和token方法详解
Feb 16 Python
Python中with上下文管理协议的作用及用法
Mar 18 Python
Python闭包的定义和使用方法
Apr 11 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 中英文语言转换类
2011/09/07 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
php截取视频指定帧为图片
2016/05/16 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
分享几个超级震憾的图片特效
2012/01/08 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
React中上传图片到七牛的示例代码
2017/10/10 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
python执行get提交的方法
2015/04/29 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
《Python学习手册》学习总结
2018/01/17 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
如何手工释放资源
2013/12/15 面试题
教师师德教育的自我评价
2013/10/31 职场文书
心得体会怎么写
2013/12/30 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
2015年话务员工作总结
2015/04/29 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis