]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-deploy.git/commitdiff
add a finally block to close stderr/stdout
authorAlfredo Deza <alfredo.deza@inktank.com>
Fri, 15 Aug 2014 15:42:07 +0000 (11:42 -0400)
committerAlfredo Deza <alfredo.deza@inktank.com>
Fri, 15 Aug 2014 15:42:07 +0000 (11:42 -0400)
Signed-off-by: Alfredo Deza <alfredo.deza@inktank.com>
ceph_deploy/util/decorators.py

index b6d5d15ab3c76de9f09be7a623b6455b9ff314fb..9565729b5ec38ad87fdf04d341142257596863ce 100644 (file)
@@ -1,5 +1,6 @@
 import logging
 import sys
+import traceback
 from functools import wraps
 
 
@@ -67,6 +68,28 @@ def catches(catch=None, handler=None, exit=True):
                     logger.error(make_exception_message(e))
                     if exit:
                         sys.exit(1)
+            except Exception as err:  # anything else
+                str_failure = traceback.format_exc(err)
+                if str_failure:
+                    for line in str_failure.split('\n'):
+                        logger.error("%s" % line)
+                else:  # if for whatever reason we can't get an err message
+                    logger.error(make_exception_message(err))
+
+            finally:
+                # This block is crucial to avoid having issues with
+                # Python spitting non-sense thread exceptions. We have already
+                # handled what we could, so close stderr and stdout.
+                import sys
+                try:
+                    sys.stdout.close()
+                except:
+                    pass
+                try:
+                    sys.stderr.close()
+                except:
+                    pass
+
         return newfunc
 
     return decorate