Description: fix closed pipe handling Author: Sascha Steinbiss Bug: https://github.com/jeffkaufman/icdiff/issues/156 Forwarded: https://github.com/jeffkaufman/icdiff/pull/165 Last-Update: 2019-09-25 --- a/icdiff +++ b/icdiff @@ -594,7 +594,22 @@ validate_has_two_arguments(parser, args) if not options.cols: set_cols_option(options) - diff(options, *args) + try: + diff(options, *args) + except KeyboardInterrupt: + pass + except IOError as e: + if e.errno == errno.EPIPE: + pass + else: + raise + + # Close stderr to prevent printing errors when icdiff is piped to + # something that closes before icdiff is done writing + # + # See: https://stackoverflow.com/questions/26692284/... + # ...how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python + sys.stderr.close() def codec_print(s, options): @@ -755,18 +770,4 @@ if __name__ == "__main__": - try: - start() - except KeyboardInterrupt: - pass - except IOError as e: - if e.errno == errno.EPIPE: - pass - else: - raise - # Close stderr to prevent printing errors when icdiff is piped to - # something that closes before icdiff is done writing - # - # See: https://stackoverflow.com/questions/26692284/ - # how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python - sys.stderr.close() + start()