zoukankan      html  css  js  c++  java
  • appium--自动检测端口和释放端口

    检测端口

    当端口被其他服务占用时,如果我们还启动这个端口,则会报错,所以很有必要在使用这个端口时,先来检测一下这个端口有没有被其他服务使用。

    端口检测需要用到socket模块来校验端口是否被占用

    什么是socket?

    网络上的两个程序通信,底层都是使用socket来实现的。socket的本质是编程接口,对TCP/IP的封装。

    shutdown(flag) 禁止在 一个socket上进行数据的接收与发送,利用shutdown函数使socket双向数据传输变为单项数据传输, shutdown()需要一个单独的参数,该参数表示如果关闭socket

    • 0表示禁止以后读
    • 1表示禁止以后写
    • 2表示禁止以后读和写
    import socket
    
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((host, port))
            s.shutdown(2)
        except OSError as e:
            print('端口没有被其他服务占用,可以使用')
            print(e)
        else:
            print('端口被其他服务占用了')
    
    
    if __name__ == '__main__':
        check_port(host='127.0.0.1', port=4723)  # port不能是字符串

    当我们启动appium服务,并且端口是4723时,提示我们

    端口被其他服务占用了

    当端口没有被其他服务使用时提示

    端口没有被其他服务占用,可以使用
    [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    这时候我们就可以使用4723端口了

    自动释放端口

    前面我们说了关闭端口的两种方式,第一种是在资源管理器中关闭,第二种是使用命令关闭,不管是哪种方式,都需要我们手动去执行,对于做自动化的老司机来说,这肯定不行的,接下来让我们使用脚本来关闭

    import os
    
    
    # 释放端口
    def release_port(port):
        # 执行命令
        cmd_find = 'netstat -aon | findstr %s' % (port)
        print('cmd_find', cmd_find)
    
        # 返回执行后的结果
        res = os.popen(cmd_find).read()
        print('res', res)
    
        if str(port) and 'LISTENING' in res:
            # 获取端口的pid
            i = res.index('LISTENING') # LISTENTING的索引
            start = i + len('LISTENING') + 7
            end = res.index('
    ')
            pid = res[start:end]
            print('pid:', pid)
    
            # 关闭被占用端口的pid
            cmd_kill = 'taskkill -f -pid %s' % (pid)
            print('cmd_kill:', cmd_kill)
            os.popen(cmd_kill)  # 关闭端口
        else:
            print('当前端口是可以使用的')
    
    
    if __name__ == '__main__':
        release_port(4727)

    结果:

    cmd_find netstat -aon | findstr 4727
    res   TCP    0.0.0.0:4727           0.0.0.0:0              LISTENING       3056
    
    pid: 3056
    cmd_kill: taskkill -f -pid 3056

  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11440815.html
Copyright © 2011-2022 走看看