git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Python in Blender. Writing information to a file.


On 09Aug2019 20:53, Paul St George <email at paulstgeorge.com> wrote:
>>>I almost understand.
>>>Are you saying I should change the first line of code to something 
>>>like:
>>>
>>>|outstream = with open(path to my file,'w') # this is invalid syntax|
>>>
>>>and then delete the
>>>outstream.close()
>>
>>No, you should do what Peter wrote:
>>
>>with open("/path/to/file", "w") as outstream:
>>? print(my_stuff, file=outstream)
>>
>Got it! I hadn't taken Peter's advice as code. I thought (well anyway now I have it). So thanks to Peter, Cameron and
>Rhodri.

No worries. You should also got and look up "context manager" in the 
Python docs.

It is a general mechanism where you can write:

  with something as name:
    suite of code

where "something" is an object which implements a context manager.  
Before "suite of code" starts Python calls "something.__enter__" and 
when the interpreter leaves the suite Python calls "something.__exit__".

Notably, it will call __exit__ no matter how you leave the suite: as 
usual, by falling off the end, or early with an exception or a break or 
a continue or a return. The __exit__ function always gets called.

In the case Peter's example, "something" is "open()": the file object 
you get back from open() implements a context manager. Its __enter__ 
function does nothing, but its __exit__ function closes the file.  
Reliably and immediately.

Cheers, Cameron Simpson <cs at cskk.id.au> (formerly cs at zip.com.au)

I swear to god, officer, I'm fixing this bridge. Just go divert traffic.