忘了重定向stderr导致的某问题

最近某python程序常常抛exception。而且比较神奇的是,貌似这个exception是一层层抛出来的。 先是最内层except块打的log,然后是次外层,然后是再外面…… 我本来写的代码并不会重抛异常,所以这很神奇…… except块大约是这样的: except Exception as e: Log.error("send error: %r" % e) traceback.print_exc()except Exception as e: Log.error("send error: %r" % e) traceback.print_exc() 能看见第一行的log,但是之后print_exc()的结果就没了。下一行log是更外面的except块的log…… 于是这个大概就是print_exc()抛的异常,但是这个东西能抛啥…… 之后想了一下,就算是异常一路抛到最外面,也应该有个backtrace,而log里啥都没有…… 想想backtrace是打到stderr的,难道stderr没有重定向…… 之后再看了一眼,log是打到stdout的…… 再去看启动python程序的脚本,貌似只重定向了stdout,忘了重定向stderr了…… 难道断了的stderr不能写?我又写了个小程序ssh到服务器上跑: #!/usr/bin/env python   import sys import time   time.sleep(10)   try: sys.stderr.write(’test\n’) except Exception as e: print "Exception: %r" % e#!/usr/bin/env python import sys import …

Continue reading ‘忘了重定向stderr导致的某问题’ »