Core pexpect components
=======================

.. automodule:: pexpect

spawn class
-----------

.. autoclass:: spawn
   :noindex:

   .. automethod:: __init__
   .. automethod:: expect
   .. automethod:: expect_exact
   .. automethod:: expect_list
   .. automethod:: compile_pattern_list
   .. automethod:: send
   .. automethod:: sendline
   .. automethod:: write
   .. automethod:: writelines
   .. automethod:: sendcontrol
   .. automethod:: sendeof
   .. automethod:: sendintr
   .. automethod:: read
   .. automethod:: readline
   .. automethod:: read_nonblocking
   .. automethod:: eof
   .. automethod:: interact

   .. attribute:: logfile
                  logfile_read
                  logfile_send

      Set these to a Python file object (or :data:`sys.stdout`) to log all
      communication, data read from the child process, or data sent to the child
      process.

      .. note::

         With :class:`spawn` in bytes mode, the log files should be open for
         writing binary data. In unicode mode, they should
         be open for writing unicode text. See :ref:`unicode`.

Controlling the child process
`````````````````````````````

.. class:: spawn

   .. automethod:: kill
   .. automethod:: terminate
   .. automethod:: isalive
   .. automethod:: wait
   .. automethod:: close
   .. automethod:: getwinsize
   .. automethod:: setwinsize
   .. automethod:: getecho
   .. automethod:: setecho
   .. automethod:: waitnoecho

   .. attribute:: pid

      The process ID of the child process.

   .. attribute:: child_fd

      The file descriptor used to communicate with the child process.

.. _unicode:

Handling unicode
````````````````

By default, :class:`spawn` is a bytes interface: its read methods return bytes,
and its write/send and expect methods expect bytes. If you pass the *encoding*
parameter to the constructor, it will instead act as a unicode interface:
strings you send will be encoded using that encoding, and bytes received will
be decoded before returning them to you. In this mode, patterns for
:meth:`~spawn.expect` and :meth:`~spawn.expect_exact` should also be unicode.

.. versionchanged:: 4.0

   :class:`spawn` provides both the bytes and unicode interfaces. In Pexpect
   3.x, the unicode interface was provided by a separate ``spawnu`` class.

For backwards compatibility, some Unicode is allowed in bytes mode: the
send methods will encode arbitrary unicode as UTF-8 before sending it to the
child process, and its expect methods can accept ascii-only unicode strings.

.. note::

   Unicode handling with pexpect works the same way on Python 2 and 3, despite
   the difference in names. I.e.:

   - Bytes mode works with ``str`` on Python 2, and :class:`bytes` on Python 3,
   - Unicode mode works with ``unicode`` on Python 2, and :class:`str` on Python 3.

run function
------------

.. autofunction:: run

Exceptions
----------

.. autoclass:: EOF

.. autoclass:: TIMEOUT

.. autoclass:: ExceptionPexpect

Utility functions
-----------------

.. autofunction:: which

.. autofunction:: split_command_line
