summaryrefslogtreecommitdiff
path: root/Lib/pydoc.py
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2015-03-29 15:19:13 -0400
committerR David Murray <rdmurray@bitdance.com>2015-03-29 15:19:13 -0400
commitf375b0a4d5a0362ca9b927e626a00c8328f3ac04 (patch)
treefb476a8fb3a3b4bcabb5aabc925b869067725fda /Lib/pydoc.py
parent1b74d630da388ace3187101c821d55b0799580d4 (diff)
parent1058cda38f1b409c4d52eef236f4915df592a112 (diff)
downloadcpython-git-f375b0a4d5a0362ca9b927e626a00c8328f3ac04.tar.gz
Merge: #23792: Ignore KeyboardInterrupt when the pydoc pager is active.
Diffstat (limited to 'Lib/pydoc.py')
-rwxr-xr-xLib/pydoc.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index c92b324afd..7a625e1105 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1450,11 +1450,18 @@ def pipepager(text, cmd):
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."""