On 02/20/10 14:39, northof40 wrote: > On Feb 20, 4:13 pm, MRAB <pyt...@mrabarnett.plus.com> wrote: >> 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". Not really; not all that is written to stderr signifies errors per se. Warning and Debugging info are often written to stderr as well. > Thanks for your reply. I take your point about print - perhaps I > hadn't really thought that through. Unfortunately I don't have control > of the real script that's being run so if the programmer of that > script has used print there's nothing I can do about it. Tracebacks is almost always written to stderr, not stdout; unless the programmer explicitly redirect the traceback into stdout. > Perhaps I could modify the question. If A.py terminates due an > unhandled exception is there anyway for B.py to know that's happened > (without A.py's cooperation ?). A well-behaved program will exit with status code 0; if and only if it exited cleanly. I believe a python program that exited due to unhandled exception always return non-zero status code. However, if the program handled an error and called exit(0) explicitly or the execution of the program falls to the end of the module; there is no way to distinguish it from regular clean exit. -- http://mail.python.org/mailman/listinfo/python-list