@@ -43,11 +43,32 @@ The :mod:`pty` module defines the following functions:
43
43
44
44
Spawn a process, and connect its controlling terminal with the current
45
45
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 >`_.
47
71
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.
51
72
52
73
.. versionchanged :: 3.4
53
74
:func: `spawn ` now returns the status value from :func: `os.waitpid `
0 commit comments