summaryrefslogtreecommitdiff
path: root/Doc/library/pty.rst
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2010-12-30 17:22:33 +0000
committerGeorg Brandl <georg@python.org>2010-12-30 17:22:33 +0000
commitc6cb710abf7e1565f20707a499389ce826a1814e (patch)
treee1d1ad885b70d043ca4fea198ca4474ef9cb3e5b /Doc/library/pty.rst
parent877b60ab7dcb286c5e5793401d2c95358d779450 (diff)
downloadcpython-c6cb710abf7e1565f20707a499389ce826a1814e.tar.gz
Remove some of the old demos. (Put a few somewhere else.)
Diffstat (limited to 'Doc/library/pty.rst')
-rw-r--r--Doc/library/pty.rst47
1 files changed, 47 insertions, 0 deletions
diff --git a/Doc/library/pty.rst b/Doc/library/pty.rst
index d039fdf4fe..2b9385b5f9 100644
--- a/Doc/library/pty.rst
+++ b/Doc/library/pty.rst
@@ -45,3 +45,50 @@ The :mod:`pty` module defines the following functions:
a file descriptor. The defaults try to read 1024 bytes each time they are
called.
+
+Example
+-------
+
+.. sectionauthor:: Steen Lumholt
+
+The following program acts like the Unix command :manpage:`script(1)`, using a
+pseudo-terminal to record all input and output of a terminal session in a
+"typescript". ::
+
+ import sys, os, time, getopt
+ import pty
+
+ mode = 'wb'
+ shell = 'sh'
+ filename = 'typescript'
+ if 'SHELL' in os.environ:
+ shell = os.environ['SHELL']
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'ap')
+ except getopt.error as msg:
+ print('%s: %s' % (sys.argv[0], msg))
+ sys.exit(2)
+
+ for opt, arg in opts:
+ # option -a: append to typescript file
+ if opt == '-a':
+ mode = 'ab'
+ # option -p: use a Python shell as the terminal command
+ elif opt == '-p':
+ shell = sys.executable
+ if args:
+ filename = args[0]
+
+ script = open(filename, mode)
+
+ def read(fd):
+ data = os.read(fd, 1024)
+ script.write(data)
+ return data
+
+ sys.stdout.write('Script started, file is %s\n' % filename)
+ script.write(('Script started on %s\n' % time.asctime()).encode())
+ pty.spawn(shell, read)
+ script.write(('Script done on %s\n' % time.asctime()).encode())
+ sys.stdout.write('Script done, file is %s\n' % filename)