]> granicus.if.org Git - python/commitdiff
#23792: also catch interrupt around pipe.write.
authorR David Murray <rdmurray@bitdance.com>
Mon, 30 Mar 2015 14:14:47 +0000 (10:14 -0400)
committerR David Murray <rdmurray@bitdance.com>
Mon, 30 Mar 2015 14:14:47 +0000 (10:14 -0400)
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.

Lib/pydoc.py

index cf9e0f021ce9a439f55019556401f580d7771c8f..faaa85953566b9cdb013773d2127cacb475e42ee 100755 (executable)
@@ -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: