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实现网站文件的全备份和差异备份
Nov 30 Python
python检查字符串是否是正确ISBN的方法
Jul 11 Python
python之super的使用小结
Aug 13 Python
Python的argparse库使用详解
Oct 09 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
python字符串替换re.sub()方法解析
Sep 18 Python
关于tf.reverse_sequence()简述
Jan 20 Python
django 多数据库及分库实现方式
Apr 01 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
python实现学生成绩测评系统
Jun 22 Python
Python高并发解决方案实现过程详解
Jul 31 Python
python调用百度API实现人脸识别
Nov 17 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 Cookie的一个使用注意点
2008/11/08 PHP
php smarty函数扩展
2010/03/15 PHP
PHP array 的加法操作代码
2010/07/24 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
window.location.hash 使用说明
2010/11/08 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
javascript 实现map集合
2015/04/03 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
Underscore源码分析
2015/12/30 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
安装vue-cli的简易过程
2018/05/22 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python中sleep函数用法实例分析
2015/04/29 Python
在Python的web框架中配置app的教程
2015/04/30 Python
Django中的forms组件实例详解
2018/11/08 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
python实现贪吃蛇小游戏
2020/03/21 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
关于Python作用域自学总结
2019/06/10 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
学习Python列表的基础知识汇总
2020/03/10 Python
Python内置异常类型全面汇总
2020/05/28 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物