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中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
Python 对象中的数据类型
May 13 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
Python后台管理员管理前台会员信息的讲解
Jan 28 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
pytorch 模型可视化的例子
Aug 17 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
python 生成正态分布数据,并绘图和解析
Dec 21 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
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
php 模拟POST提交的2种方法详解
2013/06/17 PHP
php多文件上传实现代码
2014/02/20 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
django 简单实现登录验证给你
2019/11/06 Python
python列表推导式操作解析
2019/11/26 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Python3如何判断三角形的类型
2020/04/12 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
三年级语文教学反思
2014/02/01 职场文书
大型会议接待方案
2014/03/01 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
学习保证书
2015/01/17 职场文书
政府会议通知范文
2015/04/15 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
Redis 异步机制
2022/05/15 Redis
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL