changeset: 95248:fe0c830b43bb parent: 95246:c48637f57e2b parent: 95247:77c04e949b4b user: R David Murray date: Sun Mar 29 15:19:13 2015 -0400 files: Lib/pydoc.py Misc/NEWS description: Merge: #23792: Ignore KeyboardInterrupt when the pydoc pager is active. diff -r c48637f57e2b -r fe0c830b43bb Lib/pydoc.py --- a/Lib/pydoc.py Sun Mar 29 19:23:27 2015 +0300 +++ b/Lib/pydoc.py Sun Mar 29 15:19:13 2015 -0400 @@ -1450,11 +1450,18 @@ import subprocess proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE) try: - with proc: - with io.TextIOWrapper(proc.stdin, errors='backslashreplace') as pipe: - pipe.write(text) + with io.TextIOWrapper(proc.stdin, errors='backslashreplace') as pipe: + pipe.write(text) except OSError: pass # Ignore broken pipes caused by quitting the pager program. + while True: + try: + proc.wait() + break + except KeyboardInterrupt: + # Ignore ctl-c like the pager itself does. Otherwise the pager is + # left running and the terminal is in raw mode and unusable. + pass def tempfilepager(text, cmd): """Page through text by invoking a program on a temporary file.""" diff -r c48637f57e2b -r fe0c830b43bb Misc/NEWS --- a/Misc/NEWS Sun Mar 29 19:23:27 2015 +0300 +++ b/Misc/NEWS Sun Mar 29 15:19:13 2015 -0400 @@ -30,6 +30,10 @@ Library ------- +- Issue #23792: Ignore KeyboardInterrupt when the pydoc pager is active. + This mimics the behavior of the standard unix pagers, and prevents + pipepager from shutting down while the pager itself is still running. + - Issue #23775: pprint() of OrderedDict now outputs the same representation as repr().