Python subprocess执行iperf 跑吞吐量

1、把iperf3加入系统变量,这样执行iperf3的时候不需要指定到iperf3的路径下;

按以下步骤设置系统变量

如果没有把iperf3加入系统变量,则给脚本指定iperf3所在的路径。

2、iperf3 server端:

#coding=utf-8


import subprocess
import time

def run_iperf3_server():
    # 启动iperf3服务器
    iperf_server = subprocess.Popen(['iperf3', '-s'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return iperf_server

def stop_process(process):
    # 终止给定的进程
    process.terminate()

# 示例:在本地启动iperf3服务器和客户端,然后关闭它们
if __name__ == "__main__":
    # 启动iperf3服务器
    iperf_server = run_iperf3_server()
    print(u"iperf3服务器已启动")

    # 等待2秒以确保服务器启动
    time.sleep(125)

    # 关闭iperf3服务器
    stop_process(iperf_server)
    print(u"iperf3服务器已关闭")

3、iperf3 client端:

#coding=utf-8
import subprocess
import signal
import os
import time


def run_iperf3_client(server_ip, parallel_streams, test_duration):
    # 构建iperf3客户端命令
    command = [
        'iperf3', '-c', server_ip,
        '-P', str(parallel_streams),
        '-t', str(test_duration)
    ]
    
    # 启动iperf3客户端进程
    try:
        iperf_client = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        return iperf_client
    except OSError, e:
        print u"Execution failed:", e
        return None

if __name__ == "__main__":
    # 设置参数
    server_ip = '127.0.0.1'  # 将其更改为实际的iperf服务器IP地址
    parallel_streams = 4  # 并行流数量
    test_duration = 20  # 测试持续时间(秒)
    output_file = 'C:\\Users\\admin\\Desktop\\iperf_output.txt'  # 输出文件名

    try:
        # 启动iperf3客户端
        print u"启动iperf3客户端..."
        iperf_client = run_iperf3_client(server_ip, parallel_streams, test_duration)

        if iperf_client is not None:
            # 等待客户机完成测试
            out, err = iperf_client.communicate()
            with open(output_file, 'w') as f:
                if out:
                    f.write(out.decode('utf-8'))
                if err:
                    f.write(err.decode('utf-8'))

            print u"iperf3 客户端输出已保存到" + output_file

            # 获取并打印客户端输出
            print u"iperf3 客户端输出:\n" + out.decode('utf-8')
            if err:
                print u"iperf3 客户端错误输出:\n" + err.decode('utf-8')
        else:
            print u"iperf3 客户端启动失败"

    except Exception, e:
        print u"An error occurred:", e

4、多服务端

iperf3 server

#coding=utf-8


import subprocess
import time

def start_iperf3_server(port):
    command = [
        'iperf3', '-s', '-p', str(port)
    ]
    
    try:
        server_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        return server_process
    except OSError as e:
        print u"Failed to start iperf3 server on port {port}: {e}"
        return None

if __name__ == "__main__":
    server_ports = [5201, 5202, 5203]  # 要启动的iperf3服务器端口,可以根据需要添加更多端口
    server_processes = []

    # 启动多个iperf3服务器实例
    for port in server_ports:
        print u"Starting iperf3 server on port " + unicode(port)
        process = start_iperf3_server(port)
        if process is not None:
            server_processes.append(process)
            print u"iperf3 server started on port" + unicode(port)

    # 保持主进程运行,以便iperf3服务器保持活动状态
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        print u"Shutting down iperf3 servers..."

        # 终止所有iperf3服务器实例
        for process in server_processes:
            process.terminate()
            process.wait()

        print u"All iperf3 servers have been shut down."

 iperf client 启用多个。

#coding=utf-8
import subprocess
import signal
import os
import time


def run_iperf3_client(server_ip,port,parallel_streams, test_duration):
    # 构建iperf3客户端命令
    command = [
        'iperf3', '-c', server_ip,
        '-p', str(port),
        '-P', str(parallel_streams),
        '-t', str(test_duration)
    ]
    
    # 启动iperf3客户端进程
    try:
        iperf_client = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        return iperf_client
    except OSError, e:
        print u"Execution failed:", e
        return None

if __name__ == "__main__":
    # 设置参数
    server_ip = '127.0.0.1'  # 将其更改为实际的iperf服务器IP地址
    parallel_streams = 4  # 并行流数量
    test_duration = 20  # 测试持续时间(秒)
    port = '5203'     #端口
    #output_file = 'C:\\Users\\admin\\Desktop\\iperf_output.txt'  # 输出文件名

    try:
        # 启动iperf3客户端
        print u"启动iperf3客户端..."
        iperf_client = run_iperf3_client(server_ip,port,parallel_streams, test_duration)

        if iperf_client is not None:
            # 等待客户机完成测试
            out, err = iperf_client.communicate()
            now = time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time()))    #获取当前的时间
            filename = 'Throughput-' + port + '-' + now + '-iperf.txt'
            with open(filename, 'w') as f:
                if out:
                    f.write(out.decode('utf-8'))
                if err:
                    f.write(err.decode('utf-8'))

            print u"iperf3 客户端输出已保存到" + filename

            # 获取并打印客户端输出
            print u"iperf3 客户端输出:\n" + out.decode('utf-8')
            if err:
                print u"iperf3 客户端错误输出:\n" + err.decode('utf-8')
        else:
            print u"iperf3 客户端启动失败"

    except Exception, e:
        print u"An error occurred:", e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值