Command line interface for testing internet bandwidth using speedtest.net
Go to file
Jason McCarver 15a4d0e73b add callback feature to run a user command 2015-07-15 16:48:01 -05:00
.gitignore Initial commit 2012-09-10 12:17:53 -07:00
.travis.yml Remove py31 2015-05-20 18:00:19 -05:00
CONTRIBUTING.md Some additional coding guidelines 2014-05-20 16:34:17 -05:00
LICENSE LICENSE 2013-04-26 22:37:03 -05:00
MANIFEST.in Add MANIFEST.in 2013-10-08 07:15:42 -05:00
README.rst add callback feature to run a user command 2015-07-15 16:48:01 -05:00
setup.cfg Support building wheels. Fixes #126 2015-02-26 10:51:32 -06:00
setup.py python < 2.6 does not have the 'with' statement 2014-04-23 10:31:23 -05:00
speedtest-cli.1 Update man page with --bytes argument 2014-04-23 11:52:26 -05:00
speedtest_cli.py add callback feature to run a user command 2015-07-15 16:48:01 -05:00
tox.ini Meant to add an additional line for compileall 2015-05-20 14:52:35 -05:00

README.rst

speedtest-cli
=============

Command line interface for testing internet bandwidth using
speedtest.net

.. image:: https://pypip.in/v/speedtest-cli/badge.png
        :target: https://pypi.python.org/pypi/speedtest-cli/
        :alt: Latest Version
.. image:: https://pypip.in/d/speedtest-cli/badge.png
        :target: https://pypi.python.org/pypi/speedtest-cli/
        :alt: Downloads
.. image:: https://pypip.in/license/speedtest-cli/badge.png
        :target: https://pypi.python.org/pypi/speedtest-cli/
        :alt: License

Versions
--------

speedtest-cli works with Python 2.4-3.4

Installation
------------

pip / easy\_install
~~~~~~~~~~~~~~~~~~~

::

    pip install speedtest-cli

or

::

    easy_install speedtest-cli

Github
~~~~~~

::

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

or

::

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

Just download (Like the way it used to be)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

::

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

or

::

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

Usage
-----

::

    $ speedtest-cli -h
    usage: speedtest_cli.py [-h] [--bytes] [--share] [--simple] [--list]
                            [--server SERVER] [--mini MINI] [--source SOURCE]
                            [--timeout TIMEOUT] [--secure] [--callback CALLBACK]
                            [--callback-help] [--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
      --bytes              Display values in bytes instead of bits. Does not
                           affect the image generated by --share
      --share              Generate and provide a URL to the speedtest.net share
                           results image
      --simple             Suppress verbose output, only show basic information
      --list               Display a list of speedtest.net servers sorted by
                           distance
      --server SERVER      Specify a server ID to test against
      --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
      --callback CALLBACK  Script to run at certain stages of operation
      --callback-help      Show help about --callback
      --version            Show the version number and exit

::

    $ speedtest-cli --callback-help

    speedtest-cli callback script help
    ----------------------------------

    If a callback script is given via --callback, that script will be run
    during operation.  The value passed to --callback may be the path to
    a script or a shell fragment which will be passed to the shell.

    The environment of the callback script is the same as the environment
    of speedtest-cli plus variables starting with 'STC_' that have information
    about the current state of the program.  Each execution of the callback
    script will retain all the previous 'STC_' variables and possibly add new
    variables.

    Following are the points at which the callback script will be executed and
    what 'STC_' enviornment variables will be available (only new or changed
    variables will be listed for each state):

    pre_ping - run before gathering ping time results
        STC_STATE - set to 'pre_ping'
        STC_UNITS - units used for the DL and UL speeds, e.g. Mbit/s

    post_ping
        STC_STATE   - set to 'post_ping'
        STC_PING_MS - the calculated ping latency in milliseconds

    pre_download
        STC_STATE   - set to 'pre_download'

    post_download
        STC_STATE        - set to 'post_download'
        STC_DL_SPEED     - calculated speed in STC_UNITS units
        STC_DL_SPEED_RAW - calculated speed in bits/sec

    pre_upload
        STC_STATE - set to 'pre_upload'

    post_upload
        STC_STATE        - set to 'post_upload'
        STC_UL_SPEED     - calculated speed in STC_UNITS units
        STC_UL_SPEED_RAW - calculated speed in bits/sec

    examples:
      # show all STC_ variables set during each callback
      speedtest-cli --callback --simple 'echo "$STC_STATE:"; env | grep "^STC_" | sort; echo'

      # only take action when the post_upload state is reached
      speedtest_cli --callback 'test $STC_STATE = 'post_upload' && env | grep "^STC_.*SPEED"'


Inconsistency
-------------

It is not a goal of this application to be a reliable latency reporting tool.

Latency reported by this tool should not be relied on as a value indicative of ICMP
style latency. It is a relative value used for determining the lowest latency server
for performing the actual speed test against.

There is the potential for this tool to report results inconsistent with Speedtest.net.
There are several concepts to be aware of that factor into the potential inconsistency:

1. Speedtest.net has migrated to using pure socket tests instead of HTTP based tests
2. This application is written in Python
3. Different versions of Python will execute certain parts of the code faster than others
4. CPU and Memory capacity and speed will play a large part in inconsistency between
   Speedtest.net and even other machines on the same network

Issues relating to inconsistencies will be closed as wontfix and without
additional reason or context.