Steve Holden a écrit : > i3dmaster wrote: >> On May 16, 1:05 pm, Steve Holden <[EMAIL PROTECTED]> wrote: >>> Martin Blume wrote: >>>> "tmp123" schrieb > >>>>> We have very big files with python commands >>>>> (more or less, 500000 commands each file). >>>>> It is possible to execute them command by command, >>>> inp = open(cmd_file) >>>> for line in inp: >>>> exec line >>> The problem with this approach is that each line executes without any >>> connection to the environment created by previous lies. >>> >>> Try it on a file that reads something like >>> >>> xxx = 42 >>> print xxx >>> >> cat file: >> >> x = 100 >> print x >> >> cat file.py: >> #!/usr/bin/python2.4 >> >> import os.path >> import sys >> >> file, ext = os.path.splitext(sys.argv[0]) >> f = open(file,'rb') >> for i in f: >> exec i >> >>> ./file.py >> 100 >> >> Don't see the problem though. >> > No, because there isn't one. Now try adding a function definition and > see how well it works. > > regards > Steve
This is just a problem with indentation and blocks of code, the followong will do : commands = open("commands") namespace, block = {}, "" for line in commands : line=line[:-1] if not line : continue if line[0].isspace() : block += '\n' + line continue else : if block.strip() : exec block in namespace block = line exec block in namespace print dict((k, v) for k, v in namespace.items() if k != "__builtins__") with commands containing : """ x = 5 def toto(arg) : print arg def inner() : print arg*arg inner() toto(x) """ output : 5 25 {'x': 5, 'toto': <function toto at 0x01D30C70>} (sorry Steve for the private mail) -- _____________ Maric Michaud _____________ Aristote - www.aristote.info 3 place des tapis 69004 Lyon Tel: +33 4 26 88 00 97 Mobile: +33 6 32 77 00 21 -- http://mail.python.org/mailman/listinfo/python-list