digidotcom / python-streamexpect

Python library providing cross-platform text matching for generic streams and sockets
Mozilla Public License 2.0
41 stars 8 forks source link

streamexpect

Build Status Coverage Status Code Climate GitHub Issues PyPI License

streamexpect is a library providing cross-platform "expect-like" functionality for generic Python streams and sockets . It is similar to the Pexpect library, except where Pexpect explicitly requires an underlying file (usually a TTY), streamexpect uses duck-typing and requires only a read or recv method.

View the Full Documentation

The original version of streamexpect was generously donated by Digi Wireless Design Services. The software is provided as Alpha software and has not undergone formal testing. It does, however, ship with extensive unit testing.

View the Changelog

Installation

Installation is performed using pip. The latest released version of streamexpect can be obtained with the following command:

$ pip install streamexpect

To install the development version from GitHub:

$ pip install -U -e 'git+https://github.com/digidotcom/python-streamexpect#egg=streamexpect'

Example

The following example shows opening a serial port (on a Windows PC), sending the uname command, and verifying that Linux is in the returned data.

import serial
import streamexpect

# timeout=0 is essential, as streams are required to be non-blocking
ser = serial.Serial('COM1', baudrate=115200, timeout=0)

with streamexpect.wrap(ser) as stream:
  stream.write('\r\nuname -a\r\n')
  match = stream.expect_bytes('Linux', timeout=1.0)
  print(u'Found Linux at index {}'.format(match.start))

Design Goals

Development

Development of streamexpect takes place in the open on GitHub. Please use pull requests to submit changes to code and documentation.

The process for building and testing streamexpect has been automated as much as possible. tox handles building and testing the code, as well as generating documentation and automatically testing for code style issues. tox can be installed with pip:

pip install tox

The generic tox command looks like:

tox

This will attempt to build and test streamexpect against multiple different versions of Python, and will error on versions not found. To test against only a single version of Python, specify the version at the tox command line. For example, to test only Python 2.7:

tox -e py27

Multiple versions may be specified, separated by a comma:

tox -e py27,py35

Documentation generation and code style checking are not performed by default, and so must be explicitly provided to the tox command. Documentation generation requires either Python 2.7, or Python 3.3 or greater.

tox -e docs,style

License

This software is open-source software. Copyright Digi International, 2015.

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain one at http://mozilla.org/MPL/2.0/.