当前位置: 首页 > 工具软件 > speedtest-cli > 使用案例 >

Python speedtest-cli库源码分析(第一篇:基本介绍)

曹子平
2023-12-01

(备注:本文代码基于:speedtest-cli 2.1.2)

    speedtest-cli是基于Python环境的测速工具,支持两种使用方式

1、支持命令行接口CLI(作为脚本)

2、支持在Python代码中使用(导入模块)

开源地址:https://github.com/sivel/speedtest-cli 让我们去看看官方介绍

 

speedtest-cli介绍

使用speedtest.net测试互联网带宽的命令行界面(CLI工具)

 

支持的Python版本

speedtest-cli适用于Python 2.4- Python3.7之间的任意版本(作者适配工作真厉害)

 

安装方式(6种)

1、pip方式(首选)

pip install speedtest-cli

2、easy_install方式

easy_install speedtest-cli

3、pip方式使用github源

pip install git+https://github.com/sivel/speedtest-cli.git

4、获取源代码,构建工具setup.py方式

git clone https://github.com/sivel/speedtest-cli.git
cd speedtest-cli
python setup.py install

5、使用工具wget,并为脚本文件增加可执行权限

wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli

6、使用工具curl下载,然后为脚本文件增加可执行权限

curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli

 

第一种使用方式:命令行接口,CLI工具

$ speedtest-cli -h
usage: speedtest-cli [-h] [--no-download] [--no-upload] [--single] [--bytes]
                     [--share] [--simple] [--csv]
                     [--csv-delimiter CSV_DELIMITER] [--csv-header] [--json]
                     [--list] [--server SERVER] [--exclude EXCLUDE]
                     [--mini MINI] [--source SOURCE] [--timeout TIMEOUT]
                     [--secure] [--no-pre-allocate] [--version]

Command line interface for testing internet bandwidth using speedtest.net.
--------------------------------------------------------------------------
https://github.com/sivel/speedtest-cli

optional arguments:
  -h, --help            show this help message and exit
  --no-download         Do not perform download test
  --no-upload           Do not perform upload test
  --single              Only use a single connection instead of multiple. This
                        simulates a typical file transfer.
  --bytes               Display values in bytes instead of bits. Does not
                        affect the image generated by --share, nor output from
                        --json or --csv
  --share               Generate and provide a URL to the speedtest.net share
                        results image, not displayed with --csv
  --simple              Suppress verbose output, only show basic information
  --csv                 Suppress verbose output, only show basic information
                        in CSV format. Speeds listed in bit/s and not affected
                        by --bytes
  --csv-delimiter CSV_DELIMITER
                        Single character delimiter to use in CSV output.
                        Default ","
  --csv-header          Print CSV headers
  --json                Suppress verbose output, only show basic information
                        in JSON format. Speeds listed in bit/s and not
                        affected by --bytes
  --list                Display a list of speedtest.net servers sorted by
                        distance
  --server SERVER       Specify a server ID to test against. Can be supplied
                        multiple times
  --exclude EXCLUDE     Exclude a server from selection. Can be supplied
                        multiple times
  --mini MINI           URL of the Speedtest Mini server
  --source SOURCE       Source IP address to bind to
  --timeout TIMEOUT     HTTP timeout in seconds. Default 10
  --secure              Use HTTPS instead of HTTP when communicating with
                        speedtest.net operated servers
  --no-pre-allocate     Do not pre allocate upload data. Pre allocation is
                        enabled by default to improve upload performance. To
                        support systems with insufficient memory, use this
                        option to avoid a MemoryError
  --version             Show the version number and exit

 

第二种使用方式: Python API(在代码中使用)https://github.com/sivel/speedtest-cli/wiki

import speedtest

servers = []
# If you want to test against a specific server
# servers = [1234]

threads = None
# If you want to use a single threaded test
# threads = 1

s = speedtest.Speedtest()
s.get_servers(servers)
s.get_best_server()
s.download(threads=threads)
s.upload(threads=threads)
s.results.share()

results_dict = s.results.dict()

 

不一致性介绍

此应用程序的目标不是成为可靠的延迟报告工具

不应该依赖此工具报告的延迟作为ICMP样式延迟的指示值。它是一个相对值,用于确定执行实际速度测试所需的最低延迟服务器

这个工具可能会报告与Speedtest.net不一致的结果。有几个概念需要意识到的因素到潜在的不一致:

Speedtest.net已经迁移到使用纯套接字测试,而不是基于HTTP的测试
这个应用程序是用Python编写的
不同版本的Python解释器会比其他版本更快地执行代码的某些部分
CPU和内存的容量和速度在很大程度上导致了Speedtest.net与同一网络上的其他机器之间的不一致
与不一致有关的问题将在wontfix中结束,不需要额外的理由或上下文。

 

总结

1、speedtest-cli支持作为命令行工具去使用,它提供了CLI

2、speedtest-cli可以在Python的代码中使用

 

参考文章:

https://github.com/sivel/speedtest-cli

https://github.com/sivel/speedtest-cli/wiki

 类似资料: