|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 <https://pexpect.readthedocs.org>
__ 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 <https://digidotcom.github.io/python-streamexpect>
__
The original version of streamexpect was generously donated by
Digi <http://www.digi.com>
Wireless Design Services <http://www.digi.com/wds>
. The software is provided as Alpha
software and has not undergone formal testing. It does, however, ship
with extensive unit testing.
View the Changelog <https://github.com/digidotcom/python-streamexpect/blob/master/CHANGELOG.md>
__
Installation is performed using pip. The latest released version of streamexpect can be obtained with the following command:
.. code:: sh
$ pip install streamexpect
To install the development version from GitHub:
.. code:: sh
$ pip install -U -e 'git+https://github.com/digidotcom/python-streamexpect#egg=streamexpect'
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.
.. code:: python
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))
The library should not depend on any features (besides Python) that exclude a platform. Yes, that means Windows is a first-class citizen.
When dealing with streams of data, the distinction between when the stream goes from being a series of binary bytes to a set of encoded characters can be unclear. The library should be explicit in the handling of binary versus characters, such that mixing the two types is not allowed without explicit options to enable encoding and decoding.
For 95% of users, the streamexpect.wrap
function should accomplish
the desired goals. Intelligent default options should be used so the
library just "does the right thing".
The objects returned by the streamexpect.wrap
function should
themselves be easy to use and extend. Protocol requirements between
classes should be explicit and documented.
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 <https://testrun.org/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
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/.
.. |Build Status| image:: https://travis-ci.org/digidotcom/python-streamexpect.svg?branch=master :target: https://travis-ci.org/digidotcom/python-streamexpect .. |Coverage Status| image:: https://img.shields.io/coveralls/digidotcom/python-streamexpect.svg :target: https://coveralls.io/r/digidotcom/python-streamexpect .. |Code Climate| image:: https://img.shields.io/codeclimate/github/digidotcom/python-streamexpect.svg :target: https://codeclimate.com/github/digidotcom/python-streamexpect .. |GitHub Issues| image:: https://img.shields.io/github/issues/digidotcom/python-streamexpect.svg :target: https://github.com/digidotcom/python-streamexpect/issues .. |PyPI| image:: https://img.shields.io/pypi/v/streamexpect.svg :target: https://pypi.python.org/pypi/streamexpect/ .. |License| image:: https://img.shields.io/badge/license-MPL%202.0-blue.svg :target: https://github.com/digidotcom/python-streamexpect/blob/master/LICENSE.txt
Version | Tag | Published |
---|---|---|
0.2.1 | 6yrs ago | |
0.2.0 | 7yrs ago |