blob: a815a35a5822c96c419dcc8009c651d86debbc2a [file] [log] [blame]
Benjamin Peterson90f5ba52010-03-11 22:53:45 +00001#! /usr/bin/env python3
Georg Brandl41706b32009-10-11 12:04:10 +00002
Guido van Rossum07c96451994-10-03 16:45:35 +00003# script.py -- Make typescript of terminal session.
4# Usage:
Tim Peterse6ddc8b2004-07-18 05:56:09 +00005# -a Append to typescript.
6# -p Use Python as shell.
Guido van Rossum07c96451994-10-03 16:45:35 +00007# Author: Steen Lumholt.
8
9
Georg Brandl41706b32009-10-11 12:04:10 +000010import os, time, sys, getopt
Guido van Rossum07c96451994-10-03 16:45:35 +000011import pty
12
13def read(fd):
Tim Peterse6ddc8b2004-07-18 05:56:09 +000014 data = os.read(fd, 1024)
Georg Brandl41706b32009-10-11 12:04:10 +000015 script.write(data)
Tim Peterse6ddc8b2004-07-18 05:56:09 +000016 return data
Guido van Rossum07c96451994-10-03 16:45:35 +000017
18shell = 'sh'
19filename = 'typescript'
Georg Brandl41706b32009-10-11 12:04:10 +000020mode = 'wb'
Collin Winter6f2df4d2007-07-17 20:59:35 +000021if 'SHELL' in os.environ:
Tim Peterse6ddc8b2004-07-18 05:56:09 +000022 shell = os.environ['SHELL']
Guido van Rossum07c96451994-10-03 16:45:35 +000023
Georg Brandl41706b32009-10-11 12:04:10 +000024try:
25 opts, args = getopt.getopt(sys.argv[1:], 'ap')
26except getopt.error as msg:
27 print('%s: %s' % (sys.argv[0], msg))
28 sys.exit(2)
29
30for o, a in opts:
31 if o == '-a':
32 mode = 'ab'
33 elif o == '-p':
34 shell = 'python'
35
36script = open(filename, mode)
Guido van Rossum07c96451994-10-03 16:45:35 +000037
38sys.stdout.write('Script started, file is %s\n' % filename)
Georg Brandl41706b32009-10-11 12:04:10 +000039script.write(('Script started on %s\n' % time.ctime(time.time())).encode())
Guido van Rossum07c96451994-10-03 16:45:35 +000040pty.spawn(shell, read)
Georg Brandl41706b32009-10-11 12:04:10 +000041script.write(('Script done on %s\n' % time.ctime(time.time())).encode())
Guido van Rossum07c96451994-10-03 16:45:35 +000042sys.stdout.write('Script done, file is %s\n' % filename)