~dkuhlman/python-training-materials/Materials

« back to all changes in this revision

Viewing changes to python-3.5.2-docs-html/_sources/library/pty.txt

  • Committer: Dave Kuhlman
  • Date: 2017-04-15 16:24:56 UTC
  • Revision ID: dkuhlman@davekuhlman.org-20170415162456-iav9vozzg4iwqwv3
Updated docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
:mod:`pty` --- Pseudo-terminal utilities
 
2
========================================
 
3
 
 
4
.. module:: pty
 
5
   :platform: Linux
 
6
   :synopsis: Pseudo-Terminal Handling for Linux.
 
7
 
 
8
.. moduleauthor:: Steen Lumholt
 
9
.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
 
10
 
 
11
**Source code:** :source:`Lib/pty.py`
 
12
 
 
13
--------------
 
14
 
 
15
The :mod:`pty` module defines operations for handling the pseudo-terminal
 
16
concept: starting another process and being able to write to and read from its
 
17
controlling terminal programmatically.
 
18
 
 
19
Because pseudo-terminal handling is highly platform dependent, there is code to
 
20
do it only for Linux. (The Linux code is supposed to work on other platforms,
 
21
but hasn't been tested yet.)
 
22
 
 
23
The :mod:`pty` module defines the following functions:
 
24
 
 
25
 
 
26
.. function:: fork()
 
27
 
 
28
   Fork. Connect the child's controlling terminal to a pseudo-terminal. Return
 
29
   value is ``(pid, fd)``. Note that the child  gets *pid* 0, and the *fd* is
 
30
   *invalid*. The parent's return value is the *pid* of the child, and *fd* is a
 
31
   file descriptor connected to the child's controlling terminal (and also to the
 
32
   child's standard input and output).
 
33
 
 
34
 
 
35
.. function:: openpty()
 
36
 
 
37
   Open a new pseudo-terminal pair, using :func:`os.openpty` if possible, or
 
38
   emulation code for generic Unix systems. Return a pair of file descriptors
 
39
   ``(master, slave)``, for the master and the slave end, respectively.
 
40
 
 
41
 
 
42
.. function:: spawn(argv[, master_read[, stdin_read]])
 
43
 
 
44
   Spawn a process, and connect its controlling terminal with the current
 
45
   process's standard io. This is often used to baffle programs which insist on
 
46
   reading from the controlling terminal.
 
47
 
 
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
 
 
52
   .. versionchanged:: 3.4
 
53
      :func:`spawn` now returns the status value from :func:`os.waitpid`
 
54
      on the child process.
 
55
 
 
56
Example
 
57
-------
 
58
 
 
59
.. sectionauthor:: Steen Lumholt
 
60
 
 
61
The following program acts like the Unix command :manpage:`script(1)`, using a
 
62
pseudo-terminal to record all input and output of a terminal session in a
 
63
"typescript". ::
 
64
 
 
65
    import argparse
 
66
    import os
 
67
    import pty
 
68
    import sys
 
69
    import time
 
70
 
 
71
    parser = argparse.ArgumentParser()
 
72
    parser.add_argument('-a', dest='append', action='store_true')
 
73
    parser.add_argument('-p', dest='use_python', action='store_true')
 
74
    parser.add_argument('filename', nargs='?', default='typescript')
 
75
    options = parser.parse_args()
 
76
 
 
77
    shell = sys.executable if options.use_python else os.environ.get('SHELL', 'sh')
 
78
    filename = options.filename
 
79
    mode = 'ab' if options.append else 'wb'
 
80
 
 
81
    with open(filename, mode) as script:
 
82
        def read(fd):
 
83
            data = os.read(fd, 1024)
 
84
            script.write(data)
 
85
            return data
 
86
 
 
87
        print('Script started, file is', filename)
 
88
        script.write(('Script started on %s\n' % time.asctime()).encode())
 
89
 
 
90
        pty.spawn(shell, read)
 
91
 
 
92
        script.write(('Script done on %s\n' % time.asctime()).encode())
 
93
        print('Script done, file is', filename)