git.net

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

Python in Blender. Writing information to a file.


On 09/08/2019 04:09, Cameron Simpson wrote:
> On 08Aug2019 22:42, Paul St George <email at paulstgeorge.com> wrote:
>> On 08/08/2019 10:18, Peter Otten wrote:
>>> The print() function has a keyword-only file argument. So:
>>> with open(..., "w") as outstream:
>>> ??? print("Focal length:", bpy.context.object.data.lens, 
>>> file=outstream)
> [...]
>>>
>> That worked perfectly.
>>
>> outstream = open(path to my file,'w')
>> print(
>> whatever I want to print
>> file=outstream
>> )
>> outstream.close()
>
> I just wanted to point out Peter's use of the open context manager:
>
> ?? with open(..., "w") as outstream:
> ???? print stuff ...
>
> You'll notice that it does not overtly close the file. The file object 
> returned from open() is a context manager, the "with" statement 
> arranges to close the file when your programme exits the with suite.
>
> Importantly, the close will happen even if the code inside raises an 
> exception, which in your "open..print..close" sequence would not reach 
> the close call.
>
> So we recommend the "with" form of open() above.
>
> There are circumstances where it isn't useful, but they are very rare.
>
> Cheers,
> Cameron Simpson <cs at cskk.id.au>
>
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()