Python module to control a GSM modem attached to the system: send/receive SMS messages, handle calls, etc
Python Shell
Latest commit 834c68b Jun 11, 2014 @faucamp Merge pull request #38 from Tinkertanker/dwm-156
Allow spaces in +CMGL response in PDU mode



GSM modem module for Python

python-gsmmodem is a module that allows easy control of a GSM modem attached to the system. It also includes a couple of useful commandline utilities for interacting with a GSM modem.

Its features include:

  • simple methods for sending SMS messages, checking signal level, etc
  • easy-to-use API for starting and responding to USSD sessions and making voice calls
  • handling incoming phone calls and received SMS messages via callback methods
  • support for SMS PDU and text mode
  • support for tracking SMS status reports
  • wraps AT command errors into Python exceptions by default
  • modular design; you easily issue your own AT commands to the modem (with error checking), or read/write directly from/to the modem if you prefer
  • comprehensive test suite

Bundled utilities:

  • GSMTerm: an easy-to-use serial terminal for communicating with an attached GSM modem. It features command completion, built-in help for many AT commands, history, context-aware prompt, etc.
  • a simple command line script to send SMS messages
  • simple utility to identify attached modem. Can also be used to provide debug information used for development of python-gsmmodem.


  • Python 2.6 or later
  • pyserial

How to install this package

There are two ways to install python-gsmmodem:

Automatic installation

pip install python-gsmmodem

pip will automatically download and install all dependencies, as required. You can also utilise easy_install in the same manner as using pip above.

If you are utilising python-gsmmodem as part of another project, add it to your install_requires section of your file and upon your project's installation, it will be pulled in automatically.

Manual installation

Download and extract the python-gsmmodem archive from PyPI for the current release version, or clone from GitHub. Next, do this:

python install

Note that python-gsmmodem relies on pyserial for serial communications:

Testing the package

Build Status Coverage Status

To run all unit tests, do:

python test

Unit test code coverage information may be generated by using coverage. You can execute it directly from by doing:

python coverage

This will run all unit tests and report on code coverage statistics.

Building documentation

This package contains Sphinx-based documentation. To manually build or test the documentation locally, do the following:

git clone
cd python-gsmmodem
pip install .[doc]
cd doc
make html

For true isolation, you may wish to run the above commands within a virtualenv, which will help you manage this development installation.

License information

Copyright (C) 2013 Francois Aucamp See AUTHORS for all authors and contact information.

License: GNU Lesser General Public License, version 3 or later; see COPYING
included in this archive for details.