diff options
author | Georg Brandl <georg@python.org> | 2010-12-30 17:22:33 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2010-12-30 17:22:33 (GMT) |
commit | 4cf83f4d128bd40ebe3b6e59ced4895f554d18de (patch) | |
tree | ccc6e4c3e03a711c45f4badf811314231d646d95 /Doc/library/pty.rst | |
parent | d1fc34d563a9fd06a78226b1bb4e56286c70e035 (diff) | |
download | cpython-4cf83f4d128bd40ebe3b6e59ced4895f554d18de.zip cpython-4cf83f4d128bd40ebe3b6e59ced4895f554d18de.tar.gz cpython-4cf83f4d128bd40ebe3b6e59ced4895f554d18de.tar.bz2 |
Remove some of the old demos. (Put a few somewhere else.)
Diffstat (limited to 'Doc/library/pty.rst')
-rw-r--r-- | Doc/library/pty.rst | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Doc/library/pty.rst b/Doc/library/pty.rst index d039fdf..2b9385b 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) |