Skip to content

Commit 522ccef

Browse files
RadicalZephyrvstinner
authored andcommitted
bpo-22865: Expand on documentation for the pty.spawn function (GH-11980)
1 parent 45a24b8 commit 522ccef

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

Doc/library/pty.rst

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,32 @@ The :mod:`pty` module defines the following functions:
4343

4444
Spawn a process, and connect its controlling terminal with the current
4545
process's standard io. This is often used to baffle programs which insist on
46-
reading from the controlling terminal.
46+
reading from the controlling terminal. It is expected that the process
47+
spawned behind the pty will eventually terminate, and when it does *spawn*
48+
will return.
49+
50+
The functions *master_read* and *stdin_read* are passed a file descriptor
51+
which they should read from, and they should always return a byte string. In
52+
order to force spawn to return before the child process exits an
53+
:exc:`OSError` should be thrown.
54+
55+
The default implementation for both functions will read and return up to 1024
56+
bytes each time the function is called. The *master_read* callback is passed
57+
the pseudoterminal’s master file descriptor to read output from the child
58+
process, and *stdin_read* is passed file descriptor 0, to read from the
59+
parent process's standard input.
60+
61+
Returning an empty byte string from either callback is interpreted as an
62+
end-of-file (EOF) condition, and that callback will not be called after
63+
that. If *stdin_read* signals EOF the controlling terminal can no longer
64+
communicate with the parent process OR the child process. Unless the child
65+
process will quit without any input, *spawn* will then loop forever. If
66+
*master_read* signals EOF the same behavior results (on linux at least).
67+
68+
If both callbacks signal EOF then *spawn* will probably never return, unless
69+
*select* throws an error on your platform when passed three empty lists. This
70+
is a bug, documented in `issue 26228 <https://bugs.python.org/issue26228>`_.
4771

48-
The functions *master_read* and *stdin_read* should be functions which read from
49-
a file descriptor. The defaults try to read 1024 bytes each time they are
50-
called.
5172

5273
.. versionchanged:: 3.4
5374
:func:`spawn` now returns the status value from :func:`os.waitpid`

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,3 +1859,4 @@ Zheao Li
18591859
Carsten Klein
18601860
Diego Rojas
18611861
Edison Abahurire
1862+
Geoff Shannon
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add detail to the documentation on the `pty.spawn` function.

0 commit comments

Comments
 (0)