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

  • 相关阅读:
    css3实现文本渐变
    元组--购物车实战
    js事件冒泡
    openssl生成v3版自签证书
    linux中可以在哪些地方增加环境变量
    linux下如何找到USB转串口
    linux下通过shell命令测试串口
    CANopen协议
    ubuntu使用虚拟can(vcan)
    移植python3到flash有限的arm
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11440815.html
Copyright © 2011-2022 走看看