Capturing errors raised by other scripts ?

MRAB python at mrabarnett.plus.com
Sat Feb 20 04:13:10 CET 2010


northof40 wrote:
> I'm using the subroutine module to run run python script A.py from
> B.py (this is on windows fwiw).
> 
> A.py is not my script and it may raise arbitary errors before exiting.
> How can I determine what's happened before A.py exited ?
> 
> To simulate this I've got this script (which is meant to simulate
> A.py):
> 
> class customError(Exception):
> 	def __init__(self, value):
> 		self.value = value
> 	def __str__(self):
> 		return repr(self.value)
> 
> try:
> 	raise customError(2*2)
> except customError as e:
> 	print 'Custom exception occurred, value:', e.value
> 
> 
> I then run my A.py like this :
> 
>>>> fdOut, fOut = tempfile.mkstemp(suffix='.txt', prefix='AOut-')
>>>> fdErr, fErr = tempfile.mkstemp(suffix='.txt', prefix='AErr-')
>>>> try:
> ...     pathtojob="python.exe A.py"
> ...     p = subprocess.Popen(pathtojob, stderr=fdErr, stdout=fdOut)
> ... except:
> ...     print "bad stuff happened"
> ...
> 
> When I do this I the exception handler is not fired and the text
> "Custom exception occurred, value: 4" ends up in the stdout file.
> 
> I'd really like it to end up in stderr because then I could say
> "anything in stderr ? then ignore the output and flag an error".
> 
> I don't want to have to parse the stdout for error like messages and I
> can't make changes to A.py.
> 
> I'm sure there's a better way to do this - can anyone offer some
> advice ?
> 
> thanks
> 
A.py is printing the error message.

The 'print' statement prints to stdout unless you direct it elsewhere
with '>>', for example:

     print >> my_file, 'message'

If you don't want error messages to go to stdout, then don't print them
to stdout, it's as simple as that!



More information about the Python-list mailing list