I'm writing a simple modelling environment that provides a GUI for dynamically coupling fortran and C subroutines to solve a science problem. The GUI and environment glue are all python. One thing I want to do is allow the user to load a python file that provides the user defined details on how the C/Fortran modules are to be coupled in the science model ... basically a script file if you like. They use the GUI to select and run the python file. I have no control over whether/when the user edits the python script and wants to rerun the script without restarting the environment so I need to be able to (repeatedly) reload the current script at any time
I'm having problems with import and reload. Here is a simple test code (mytest.py) that runs from the python prompt that shows the problem, and the log of my session from the python command line. In the real code the variable 'model' is passed into load() ... I've just set it here to make the code self contained. At the first load() the version in siberia900.py is set to 1.00. Between the first and second load() I edit siberia900.py so that version is 0.00 (just an easy way to see if the modified code is reloaded). Clearly the reload fails (and if I don't have the try/except ... that is the commented line is executed ... it crashes with the error 'NameError: name 'siberia900' is not defined'). Also clearly reloading mytest also doesn't change anything. Now all this runs fine (i.e. the correct version numbers are output) at the python interpretter line so its clearly something to do with it being inside the module mytest which I don't understand. Finally if I uncomment the bottom two lines and run it at the unix command line as 'python mytest.py' it still fails in the same way (i.e. the 'except' line is executed). Can anyone please explain what's going on ... and how I might be able to do what I need to do. ------------------------------------ current_model_name='' def load(): global current_model_name model='siberia900' text1='import '+model text2='reload('+model+')' if model==current_model_name: try: exec(text2) print 'here 2',text2 except: print 'here 3',text1 exec(text1) # exec(text2) else: print 'here 10', text1 exec(text1) current_model_name=model return(siberia900.version) #load() #load() ---------------------------------------- ----------------------------------------- >>> import mytest >>> mytest.load() here 10 import siberia900 '1.00' >>> mytest.load() here 3 import siberia900 '1.00' >>> reload(mytest) <module 'mytest' from 'mytest.pyc'> >>> mytest.load() here 10 import siberia900 '1.00' ----------------------------------------- ==================================================================== Prof Garry Willgoose, Australian Professorial Fellow in Environmental Engineering, Director, Centre for Climate Impact Management (C2IM), School of Engineering, The University of Newcastle, Callaghan, 2308 Australia. Centre webpage: www.c3im.org.au Phone: (International) +61 2 4921 6050 (Tues-Fri AM); +61 2 6545 9574 (Fri PM-Mon) FAX: (International) +61 2 4921 6991 (Uni); +61 2 6545 9574 (personal and Telluric) Env. Engg. Secretary: (International) +61 2 4921 6042 email: [EMAIL PROTECTED]; [EMAIL PROTECTED] email-for-life: [EMAIL PROTECTED] personal webpage: www.telluricresearch.com/garry ==================================================================== "Do not go where the path may lead, go instead where there is no path and leave a trail" Ralph Waldo Emerson ==================================================================== _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor