For my sins I'm a MS Windows user at work and apart from that I have a small problem ...
I like to write python scripts to do small tasks and then double click on them from the file explorer to run them. Unfortunately I'm not perfect and sometimes I make mistakes and have unhandled exceptions or syntax errors when running the scripts. The default behaviour is to shut down the command window which leaves you no chance of reading the exception. In the past I have created .bat wrapper files that just call the python interpreter, but it is a bit tedious to have to create a matching .bat file for every script. So I came up with the following approach... 1. Copy python.exe to pythoncmd.exe 2. Add a bit of stuff to sitecustomize.py 3. Add a special first line to every python script and give it a .cmd extension. The stuff added to sitecustomize.py (actually I created a sitecustomize.py for this) is: """ import sys import os if os.path.basename(sys.executable) == 'pythoncmd.exe': def cmdexcepthook(*args): sys.__excepthook__(*args) # Let use confirm/inspect error os.system('pause') sys.excepthook = cmdexcepthook """ The special first line is: @pythoncmd -x "%~f0" %* & exit /b (In the python.org FAQ for windows it says @setlocal enableextensions & python -x %~f0 %* & goto :EOF but since I have no idea which is "right" I chose the simpler looking one) This approach does require pythoncmd.exe to by in your %PATH% but I think that is reasonable ;) I am a bit disappointed I couldn't think of a way of deciding if I was running a ".cmd" file in sitecustomize.py so that I could just use the normal python.exe. Using a renamed interpreter .exe is just a trick for detecting when I am running .cmd files, but it means that the script won't run on another machine that hasn't had the python.exe copied to pythoncmd.exe on it. Which is a shame. So my question. Is there a better way? I'm not really happy with this approach. Should I stop worrying and go and play my new ukulele? Answers please. Giles -- http://mail.python.org/mailman/listinfo/python-list