We don't detach the downloader process from TTY, so it receives SIGINT as well, and may even exit sooner than Python raises KeyboardInterrupt in the parent process.
- downloader: don't print ctrl-c traceback - parent: handle EINTR and EOF as ctrl-c --- urlgrabber/grabber.py | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-) diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py index 7bb2f96..cd1724c 100644 --- a/urlgrabber/grabber.py +++ b/urlgrabber/grabber.py @@ -455,7 +455,7 @@ import pycurl from ftplib import parse150 from StringIO import StringIO from httplib import HTTPException -import socket, select +import socket, select, errno from byterange import range_tuple_normalize, range_tuple_to_header, RangeError try: @@ -2087,7 +2087,13 @@ class _ExternalDownloader: def perform(self): ret = [] - lines = _readlines(self.stdout) + try: lines = _readlines(self.stdout) + except OSError, e: + if e.args[0] != errno.EINTR: raise + raise KeyboardInterrupt + if not lines: + if DEBUG: DEBUG.info('downloader died') + raise KeyboardInterrupt for line in lines: # parse downloader output line = line.split(' ', 3) @@ -2337,7 +2343,9 @@ def _test_file_object_readlines(wrapper, fo_output): if __name__ == '__main__': if sys.argv[1:] == ['DOWNLOADER']: - download_process() + try: download_process() + except KeyboardInterrupt: + raise SystemExit # no traceback _main_test() _retry_test() -- 1.7.4.4 _______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel