Benjamin Peterson | 90f5ba5 | 2010-03-11 22:53:45 +0000 | [diff] [blame^] | 1 | #! /usr/bin/env python3 |
Georg Brandl | 41706b3 | 2009-10-11 12:04:10 +0000 | [diff] [blame] | 2 | |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 3 | # script.py -- Make typescript of terminal session. |
| 4 | # Usage: |
Tim Peters | e6ddc8b | 2004-07-18 05:56:09 +0000 | [diff] [blame] | 5 | # -a Append to typescript. |
| 6 | # -p Use Python as shell. |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 7 | # Author: Steen Lumholt. |
| 8 | |
| 9 | |
Georg Brandl | 41706b3 | 2009-10-11 12:04:10 +0000 | [diff] [blame] | 10 | import os, time, sys, getopt |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 11 | import pty |
| 12 | |
| 13 | def read(fd): |
Tim Peters | e6ddc8b | 2004-07-18 05:56:09 +0000 | [diff] [blame] | 14 | data = os.read(fd, 1024) |
Georg Brandl | 41706b3 | 2009-10-11 12:04:10 +0000 | [diff] [blame] | 15 | script.write(data) |
Tim Peters | e6ddc8b | 2004-07-18 05:56:09 +0000 | [diff] [blame] | 16 | return data |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 17 | |
| 18 | shell = 'sh' |
| 19 | filename = 'typescript' |
Georg Brandl | 41706b3 | 2009-10-11 12:04:10 +0000 | [diff] [blame] | 20 | mode = 'wb' |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 21 | if 'SHELL' in os.environ: |
Tim Peters | e6ddc8b | 2004-07-18 05:56:09 +0000 | [diff] [blame] | 22 | shell = os.environ['SHELL'] |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 23 | |
Georg Brandl | 41706b3 | 2009-10-11 12:04:10 +0000 | [diff] [blame] | 24 | try: |
| 25 | opts, args = getopt.getopt(sys.argv[1:], 'ap') |
| 26 | except getopt.error as msg: |
| 27 | print('%s: %s' % (sys.argv[0], msg)) |
| 28 | sys.exit(2) |
| 29 | |
| 30 | for o, a in opts: |
| 31 | if o == '-a': |
| 32 | mode = 'ab' |
| 33 | elif o == '-p': |
| 34 | shell = 'python' |
| 35 | |
| 36 | script = open(filename, mode) |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 37 | |
| 38 | sys.stdout.write('Script started, file is %s\n' % filename) |
Georg Brandl | 41706b3 | 2009-10-11 12:04:10 +0000 | [diff] [blame] | 39 | script.write(('Script started on %s\n' % time.ctime(time.time())).encode()) |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 40 | pty.spawn(shell, read) |
Georg Brandl | 41706b3 | 2009-10-11 12:04:10 +0000 | [diff] [blame] | 41 | script.write(('Script done on %s\n' % time.ctime(time.time())).encode()) |
Guido van Rossum | 07c9645 | 1994-10-03 16:45:35 +0000 | [diff] [blame] | 42 | sys.stdout.write('Script done, file is %s\n' % filename) |