| Index: third_party/pexpect/doc/history.rst
|
| diff --git a/third_party/pexpect/doc/history.rst b/third_party/pexpect/doc/history.rst
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..11678656d7725036736242aa74c7228c361bfd8e
|
| --- /dev/null
|
| +++ b/third_party/pexpect/doc/history.rst
|
| @@ -0,0 +1,233 @@
|
| +History
|
| +=======
|
| +
|
| +Releases
|
| +--------
|
| +
|
| +Version 4.0
|
| +```````````
|
| +
|
| +* Integration with :mod:`asyncio`: passing ``async=True`` to :meth:`~.spawn.expect`,
|
| + :meth:`~.spawn.expect_exact` or :meth:`~.spawn.expect_list` will make them return a
|
| + coroutine. You can get the result using ``yield from``, or wrap it in an
|
| + :class:`asyncio.Task`. This allows the event loop to do other things while
|
| + waiting for output that matches a pattern.
|
| +* Experimental support for Windows (with some caveats)—see :ref:`windows`.
|
| +* Enhancement: allow method as callbacks of argument ``events`` for
|
| + :func:`pexpect.run` (:ghissue:`176`).
|
| +* It is now possible to call :meth:`~.spawn.wait` multiple times, or after a process
|
| + is already determined to be terminated without raising an exception
|
| + (:ghpull:`211`).
|
| +* New :class:`pexpect.spawn` keyword argument, ``dimensions=(rows, columns)``
|
| + allows setting terminal screen dimensions before launching a program
|
| + (:ghissue:`122`).
|
| +* Fix regression that prevented executable, but unreadable files from
|
| + being found when not specified by absolute path -- such as
|
| + /usr/bin/sudo (:ghissue:`104`).
|
| +* Fixed regression when executing pexpect with some prior releases of
|
| + the multiprocessing module where stdin has been closed (:ghissue:`86`).
|
| +
|
| +Backwards incompatible changes
|
| +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| +
|
| +* Deprecated ``pexpect.screen`` and ``pexpect.ANSI``. Please use other packages
|
| + such as `pyte <https://pypi.python.org/pypi/pyte>`__ to emulate a terminal.
|
| +* Removed the independent top-level modules (``pxssh fdpexpect FSM screen ANSI``)
|
| + which were installed alongside Pexpect. These were moved into the Pexpect
|
| + package in 3.0, but the old names were left as aliases.
|
| +* Child processes created by Pexpect no longer ignore SIGHUP by default: the
|
| + ``ignore_sighup`` parameter of :class:`pexpect.spawn` defaults to False. To
|
| + get the old behaviour, pass ``ignore_sighup=True``.
|
| +
|
| +Version 3.3
|
| +```````````
|
| +
|
| +* Added a mechanism to wrap REPLs, or shells, in an object which can conveniently
|
| + be used to send commands and wait for the output (:mod:`pexpect.replwrap`).
|
| +* Fixed issue where pexpect would attempt to execute a directory because
|
| + it has the 'execute' bit set (:ghissue:`37`).
|
| +* Removed the ``pexpect.psh`` module. This was never documented, and we found
|
| + no evidence that people use it. The new :mod:`pexpect.replwrap` module
|
| + provides a more flexible alternative.
|
| +* Fixed ``TypeError: got <type 'str'> ('\r\n') as pattern`` in :meth:`spawnu.readline`
|
| + method (:ghissue:`67`).
|
| +* Fixed issue where EOF was not correctly detected in :meth:`~.interact`, causing
|
| + a repeating loop of output on Linux, and blocking before EOF on BSD and
|
| + Solaris (:ghissue:`49`).
|
| +* Several Solaris (SmartOS) bugfixes, preventing :exc:`IOError` exceptions, especially
|
| + when used with cron(1) (:ghissue:`44`).
|
| +* Added new keyword argument ``echo=True`` for :class:`spawn`. On SVR4-like
|
| + systems, the method :meth:`~.isatty` will always return *False*: the child pty
|
| + does not appear as a terminal. Therefore, :meth:`~.setecho`, :meth:`~.getwinsize`,
|
| + :meth:`~.setwinsize`, and :meth:`~.waitnoecho` are not supported on those platforms.
|
| +
|
| +After this, we intend to start working on a bigger refactoring of the code, to
|
| +be released as Pexpect 4. There may be more bugfix 3.x releases, however.
|
| +
|
| +Version 3.2
|
| +```````````
|
| +
|
| +* Fix exception handling from :func:`select.select` on Python 2 (:ghpull:`38`).
|
| + This was accidentally broken in the previous release when it was fixed for
|
| + Python 3.
|
| +* Removed a workaround for ``TIOCSWINSZ`` on very old systems, which was causing
|
| + issues on some BSD systems (:ghpull:`40`).
|
| +* Fixed an issue with exception handling in :mod:`~pexpect.pxssh` (:ghpull:`43`)
|
| +
|
| +The documentation for :mod:`~pexpect.pxssh` was improved.
|
| +
|
| +Version 3.1
|
| +```````````
|
| +
|
| +* Fix an issue that prevented importing pexpect on Python 3 when ``sys.stdout``
|
| + was reassigned (:ghissue:`30`).
|
| +* Improve prompt synchronisation in :mod:`~pexpect.pxssh` (:ghpull:`28`).
|
| +* Fix pickling exception instances (:ghpull:`34`).
|
| +* Fix handling exceptions from :func:`select.select` on Python 3 (:ghpull:`33`).
|
| +
|
| +The examples have also been cleaned up somewhat - this will continue in future
|
| +releases.
|
| +
|
| +Version 3.0
|
| +```````````
|
| +
|
| +The new major version number doesn't indicate any deliberate API incompatibility.
|
| +We have endeavoured to avoid breaking existing APIs. However, pexpect is under
|
| +new maintenance after a long dormancy, so some caution is warranted.
|
| +
|
| +* A new :ref:`unicode API <unicode>` was introduced.
|
| +* Python 3 is now supported, using a single codebase.
|
| +* Pexpect now requires at least Python 2.6 or 3.2.
|
| +* The modules other than pexpect, such as :mod:`pexpect.fdpexpect` and
|
| + :mod:`pexpect.pxssh`, were moved into the pexpect package. For now, wrapper
|
| + modules are installed to the old locations for backwards compatibility (e.g.
|
| + ``import pxssh`` will still work), but these will be removed at some point in
|
| + the future.
|
| +* Ignoring ``SIGHUP`` is now optional - thanks to Kimmo Parviainen-Jalanko for
|
| + the patch.
|
| +
|
| +We also now have `docs on ReadTheDocs <http://pexpect.readthedocs.org/>`_,
|
| +and `continuous integration on Travis CI <https://travis-ci.org/pexpect/pexpect>`_.
|
| +
|
| +Version 2.4
|
| +```````````
|
| +
|
| +* Fix a bug regarding making the pty the controlling terminal when the process
|
| + spawning it is not, actually, a terminal (such as from cron)
|
| +
|
| +Version 2.3
|
| +```````````
|
| +
|
| +* Fixed OSError exception when a pexpect object is cleaned up. Previously, you
|
| + might have seen this exception::
|
| +
|
| + Exception exceptions.OSError: (10, 'No child processes')
|
| + in <bound method spawn.__del__ of <pexpect.spawn instance at 0xd248c>> ignored
|
| +
|
| + You should not see that anymore. Thanks to Michael Surette.
|
| +* Added support for buffering reads. This greatly improves speed when trying to
|
| + match long output from a child process. When you create an instance of the spawn
|
| + object you can then set a buffer size. For now you MUST do the following to turn
|
| + on buffering -- it may be on by default in future version::
|
| +
|
| + child = pexpect.spawn ('my_command')
|
| + child.maxread=1000 # Sets buffer to 1000 characters.
|
| +
|
| +* I made a subtle change to the way TIMEOUT and EOF exceptions behave.
|
| + Previously you could either expect these states in which case pexpect
|
| + will not raise an exception, or you could just let pexpect raise an
|
| + exception when these states were encountered. If you expected the
|
| + states then the ``before`` property was set to everything before the
|
| + state was encountered, but if you let pexpect raise the exception then
|
| + ``before`` was not set. Now, the ``before`` property will get set either
|
| + way you choose to handle these states.
|
| +* The spawn object now provides iterators for a *file-like interface*.
|
| + This makes Pexpect a more complete file-like object. You can now write
|
| + code like this::
|
| +
|
| + child = pexpect.spawn ('ls -l')
|
| + for line in child:
|
| + print line
|
| +
|
| +* write and writelines() no longer return a value. Use send() if you need that
|
| + functionality. I did this to make the Spawn object more closely match a
|
| + file-like object.
|
| +* Added the attribute ``exitstatus``. This will give the exit code returned
|
| + by the child process. This will be set to ``None`` while the child is still
|
| + alive. When ``isalive()`` returns 0 then ``exitstatus`` will be set.
|
| +* Made a few more tweaks to ``isalive()`` so that it will operate more
|
| + consistently on different platforms. Solaris is the most difficult to support.
|
| +* You can now put ``TIMEOUT`` in a list of expected patterns. This is just like
|
| + putting ``EOF`` in the pattern list. Expecting for a ``TIMEOUT`` may not be
|
| + used as often as ``EOF``, but this makes Pexpect more consistent.
|
| +* Thanks to a suggestion and sample code from Chad J. Schroeder I added the ability
|
| + for Pexpect to operate on a file descriptor that is already open. This means that
|
| + Pexpect can be used to control streams such as those from serial port devices. Now,
|
| + you just pass the integer file descriptor as the "command" when constructing a
|
| + spawn open. For example on a Linux box with a modem on ttyS1::
|
| +
|
| + fd = os.open("/dev/ttyS1", os.O_RDWR|os.O_NONBLOCK|os.O_NOCTTY)
|
| + m = pexpect.spawn(fd) # Note integer fd is used instead of usual string.
|
| + m.send("+++") # Escape sequence
|
| + m.send("ATZ0\r") # Reset modem to profile 0
|
| + rval = m.expect(["OK", "ERROR"])
|
| +
|
| +* ``read()`` was renamed to ``read_nonblocking()``. Added new ``read()`` method
|
| + that matches file-like object interface. In general, you should not notice
|
| + the difference except that ``read()`` no longer allows you to directly set the
|
| + timeout value. I hope this will not effect any existing code. Switching to
|
| + ``read_nonblocking()`` should fix existing code.
|
| +* Changed the name of ``set_echo()`` to ``setecho()``.
|
| +* Changed the name of ``send_eof()`` to ``sendeof()``.
|
| +* Modified ``kill()`` so that it checks to make sure the pid ``isalive()``.
|
| +* modified ``spawn()`` (really called from ``__spawn()``) so that it does not
|
| + raise an expection if ``setwinsize()`` fails. Some platforms such as Cygwin
|
| + do not like setwinsize. This was a constant problem and since it is not a
|
| + critical feature I decided to just silence the error. Normally I don't like
|
| + to do that, but in this case I'm making an exception.
|
| +* Added a method ``close()`` that does what you think. It closes the file
|
| + descriptor of the child application. It makes no attempt to actually kill the
|
| + child or wait for its status.
|
| +* Add variables ``__version__`` and ``__revision__`` (from cvs) to the pexpect
|
| + modules. This is mainly helpful to me so that I can make sure that I'm testing
|
| + with the right version instead of one already installed.
|
| +* ``log_open()`` and ``log_close(`` have been removed. Now use ``setlog()``.
|
| + The ``setlog()`` method takes a file object. This is far more flexible than
|
| + the previous log method. Each time data is written to the file object it will
|
| + be flushed. To turn logging off simply call ``setlog()`` with None.
|
| +* renamed the ``isAlive()`` method to ``isalive()`` to match the more typical
|
| + naming style in Python. Also the technique used to detect child process
|
| + status has been drastically modified. Previously I did some funky stuff
|
| + with signals which caused indigestion in other Python modules on some
|
| + platforms. It was a big headache. It still is, but I think it works
|
| + better now.
|
| +* attribute ``matched`` renamed to ``after``
|
| +* new attribute ``match``
|
| +* The ``expect_eof()`` method is gone. You can now simply use the
|
| + ``expect()`` method to look for EOF.
|
| +* **Pexpect works on OS X**, but the nature of the quirks cause many of the
|
| + tests to fail. See bugs. (Incomplete Child Output). The problem is more
|
| + than minor, but Pexpect is still more than useful for most tasks.
|
| +* **Solaris**: For some reason, the *second* time a pty file descriptor is created and
|
| + deleted it never gets returned for use. It does not effect the first time
|
| + or the third time or any time after that. It's only the second time. This
|
| + is weird... This could be a file descriptor leak, or it could be some
|
| + peculiarity of how Solaris recycles them. I thought it was a UNIX requirement
|
| + for the OS to give you the lowest available filedescriptor number. In any case,
|
| + this should not be a problem unless you create hundreds of pexpect instances...
|
| + It may also be a pty module bug.
|
| +
|
| +
|
| +Moves and forks
|
| +---------------
|
| +
|
| +* Pexpect development used to be hosted on Sourceforge.
|
| +* In 2011, Thomas Kluyver forked pexpect as 'pexpect-u', to support
|
| + Python 3. He later decided he had taken the wrong approach with this.
|
| +* In 2012, Noah Spurrier, the original author of Pexpect, moved the
|
| + project to Github, but was still too busy to develop it much.
|
| +* In 2013, Thomas Kluyver and Jeff Quast forked Pexpect again, intending
|
| + to call the new fork Pexpected. Noah Spurrier agreed to let them use
|
| + the name Pexpect, so Pexpect versions 3 and above are based on this
|
| + fork, which now lives `here on Github <https://github.com/pexpect/pexpect>`_.
|
| +
|
|
|