summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBerker Peksag <berker.peksag@gmail.com>2015-05-12 14:25:06 (GMT)
committerBerker Peksag <berker.peksag@gmail.com>2015-05-12 14:25:06 (GMT)
commitc2dd680115b38783dbdf5c84cae932558b35c45b (patch)
tree075994e441c16e3045ae2d803a74332c9991fb70
parentea6d5592f2964a17b14c1714bb06fe01918323b5 (diff)
downloadcpython-c2dd680115b38783dbdf5c84cae932558b35c45b.zip
cpython-c2dd680115b38783dbdf5c84cae932558b35c45b.tar.gz
cpython-c2dd680115b38783dbdf5c84cae932558b35c45b.tar.bz2
Issue #23983: Update the pty module example.
Changes: * Fixed a ResourceWarning warning * Used argparse instead of getopt
-rw-r--r--Doc/library/pty.rst66
1 files changed, 29 insertions, 37 deletions
diff --git a/Doc/library/pty.rst b/Doc/library/pty.rst
index 90baec5..b8a3897 100644
--- a/Doc/library/pty.rst
+++ b/Doc/library/pty.rst
@@ -58,40 +58,32 @@ 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)
+ import argparse
+ import os
+ import pty
+ import sys
+ import time
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-a', dest='append', action='store_true')
+ parser.add_argument('-p', dest='use_python', action='store_true')
+ parser.add_argument('filename', nargs='?', default='typescript')
+ options = parser.parse_args()
+
+ shell = sys.executable if options.use_python else os.environ.get('SHELL', 'sh')
+ filename = options.filename
+ mode = 'ab' if options.append else 'wb'
+
+ with open(filename, mode) as script:
+ def read(fd):
+ data = os.read(fd, 1024)
+ script.write(data)
+ return data
+
+ print('Script started, file is', 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())
+ print('Script done, file is', filename)