summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2015-03-30 10:14:47 -0400
committerR David Murray <rdmurray@bitdance.com>2015-03-30 10:14:47 -0400
commite7f5e147cdc32e7660586ce29ca97ccfe14c97f5 (patch)
tree93fe9bf9cbacc3746aadcf9505f45683e8957063
parent9aa1331c6f73b0868f736a40445cc3bcd33c5345 (diff)
downloadcpython-git-e7f5e147cdc32e7660586ce29ca97ccfe14c97f5.tar.gz
#23792: also catch interrupt around pipe.write.
The previous patch only dealt with KeyboardInterrupt when all of the data had been consumed by the pager. This deals with the interrupt when some data is still pending.
-rwxr-xr-xLib/pydoc.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index cf9e0f021c..faaa859535 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1453,7 +1453,12 @@ def pipepager(text, cmd):
proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
try:
with io.TextIOWrapper(proc.stdin, errors='backslashreplace') as pipe:
- pipe.write(text)
+ try:
+ pipe.write(text)
+ except KeyboardInterrupt:
+ # We've hereby abandoned whatever text hasn't been written,
+ # but the pager is still in control of the terminal.
+ pass
except OSError:
pass # Ignore broken pipes caused by quitting the pager program.
while True: