Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: third_party/pexpect/doc/history.rst

Issue 1398903002: Add third_party/pexpect (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@end-to-end-test
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/pexpect/doc/examples.rst ('k') | third_party/pexpect/doc/index.rst » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>`_.
+
« no previous file with comments | « third_party/pexpect/doc/examples.rst ('k') | third_party/pexpect/doc/index.rst » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698