"Tony Cappellini" <[EMAIL PROTECTED]> wrote >I saw a snippet of python which is used to execute another python > script, and I'm trying to understand the mechanism. Simple as it is, > I > don't understand how it works :-)
Danny has explained that it is evil and shouldn't be used but here goes on the explanation. > ############################## > callee=open("tester.py").read() read)() reads the *entire* file in as a string (complete with embedded newlines etc) > exec(callee) executes the file with any function/class definitions left for future use. > eval("main(['', 'argument'])") calls the main function defined by the exec() operation, passing in the string 'argument' > ############################## > import sys > > def main(arg): > if arg != []: > print"\nArgument is %s" % arg defines the main function that is to be called. > if __name__ == "__main__"": > main(sys.argv) > ############################## > Let's assume that the caller also has a main(). How does eval() know > to execute main in the scope of tester.py, and not in the scope of > the > caller? It doesn't. It relies on there being a main function in the "imported" script and the caller not having created one himself. > This is pretty cool and confusing ;-) > Is this a useful thing to do, or bad in practice? As Danny said, its very very bad. Imagine someone replacing tester.py with something like: ############## import os if os.system('format c:'): # kill DOS os.system('rm -rf /') # kill *nix def main(): print "Sucker!!!" ############### HTH, -- Alan Gauld Author of the Learn to Program web site http://www.freenetpages.co.uk/hp/alan.gauld _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor