Python实现Appium端口检测与释放的实现

Cora
Cora
发布时间:2026-10-15| 4人浏览过
原创

本文详解如何利用Python实现Appium相关端口的检测与释放。通过Socket模块判断端口占用状态,并结合CMD命令(netstat、taskkill)或os.popen接口强制释放被占用端口,解决自动化测试中常见的端口冲突问题。

1. 监测端口

我们需要引入Python标准库中的socket模块,用于校验指定端口当前是否处于被占用状态。

1.1 socket是什么?

简单来说,Socket是网络通信中实现数据交换的双向连接通道,其两端分别对应一个端口号。建立任何网络通信连接,至少需要一对Socket端口。

1.2 socket本质是什么?

Socket本质上是编程接口(API),它对底层的TCP/IP协议栈进行了封装。TCP/IP协议族提供了供程序员进行网络开发的标准接口,即Socket编程接口。

关于Socket的底层通讯原理,可参考相关Socket通讯原理文章;关于Python中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()函数,可以将原本的双向数据传输模式转换为单向数据传输模式。

shutdown方法的参数说明如下: > 0:表示禁止将来进行读操作; > 1:表示禁止将来进行写操作; > 2:表示同时禁止将来的读和写操作。

以下是代码执行后的结果展示:

从下图的运行状态可以看出,服务器未开启该端口的服务,这表明该端口当前是可以使用的。

2. 释放端口

如果检测到端口已被占用,则需要执行释放操作。释放端口主要有两种途径: 1. 通过CMD命令行窗口释放端口; 2. 通过Python代码自动释放端口。

2.1 cmd 释放端口

第一步,先查找我们需要关注的目标端口号。


netstat -aon | findstr "5037"


第二步,通过该端口号查找对应的进程ID(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)

我们来观察一下代码的运行结果:


结果显示端口4723是可用的。这里补充说明一下: os.popen():用于打开一个管道,从而获取输入到CMD控制台的信息。 更详细的内容,可参考Python官方os.popen()文档。 此外,若想快速了解os.popen()与os.system()的区别,可参考《调用系统命令 os.system()和os.popen()》一文。

至此,关于Python实现Appium端口检测与释放的介绍已完成。更多Python Appium端口检测相关内容,欢迎搜索本站历史文章或继续浏览后续文章,希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。