Execute commands from file

Steve Holden steve at holdenweb.com
Sat May 19 09:32:00 EDT 2007


Martin Blume wrote:
> "Steve Holden" schrieb
>>> [ difference between exec open(fname).read() 
>>>    and for line in open(fname): exec line ] 
>>>
>>> So it seems to depend on the way the file is read.
>>>
>> It depends on the way the lines of the file are executed, 
>> not how they are read. 
>>
> Could you elaborate a little bit more on the difference?
> I assumed that because read() reads the whole file, the 
> body of my function sowhat() is present, so that it can
> be parsed while the invocation of exec is still running.
> If it is read and exec'd line by line, the definition of
> the function is still left open at the moment exec() ends,
> causing the "EOF" error. Hence my statement, "it depends
> on the way the file is read".
> 
I simply meant that the whole source has to be presented to the exec 
statement and not chunked into lines.

Clearly I could read all the source in with

lines = open(cmd_file).readlines()

but if you then proceed to try and execute the source line by line as in

for l in lines:
   exec l

you will hit problems because of the disjoint nature of the execution 
which will breal up indented suites and so on.

I was probably just a little over-zealous in pursuing correct English 
usage, in which case please accept my apology.

> 
>> And you may remember the original poster was 
>> proposing this:
>>
>> inp = open(cmd_file)
>> for line in inp:
>>       exec line
>>
>> As for your first example, why not just use execfile() ?
>>
> I assume that 
>    execfile(fname)
> is equivalent to
>    exec open(fname).read() ?
> 
Pretty much.

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC/Ltd           http://www.holdenweb.com
Skype: holdenweb      http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com        squidoo.com/pythonology
tagged items:         del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ----------------




More information about the Python-list mailing list