Daniel P. Berrangé <berra...@redhat.com> writes: > On Fri, Sep 25, 2020 at 03:15:57PM +0200, Markus Armbruster wrote: >> Cleber Rosa <cr...@redhat.com> writes: >> >> > On Wed, Sep 23, 2020 at 02:37:27PM -0400, John Snow wrote: >> >> On 9/23/20 11:26 AM, Eduardo Habkost wrote: >> >> > On Tue, Sep 22, 2020 at 05:00:51PM -0400, John Snow wrote: >> >> > > Make the file handling here just a tiny bit more idiomatic. >> >> > > (I realize this is heavily subjective.) >> >> > > >> >> > > Use exist_ok=True for os.makedirs and remove the exception, >> >> > > use fdopen() to wrap the file descriptor in a File-like object, >> >> > > and use a context manager for managing the file pointer. >> >> > > >> >> > > Signed-off-by: John Snow <js...@redhat.com> >> >> > >> >> > Reviewed-by: Eduardo Habkost <ehabk...@redhat.com> >> >> > >> >> > I really miss a comment below explaining why we use >> >> > open(os.open(pathname, ...), ...) instead of open(pathname, ...). >> >> This code: >> >> fd = os.open(pathname, os.O_RDWR | os.O_CREAT, 0o666) >> f = open(fd, 'r+', encoding='utf-8') >> >> >> Not known to me. It was introduced in 907b846653 as part of an effort to >> >> reduce rebuild times. Maybe this avoids a modification time change if the >> >> file already exists? >> >> >> >> Markus? >> > >> > AFACIT the change on 907b846653 is effective because of the "is new >> > text different from old text?" conditional. I can not see how the >> > separate/duplicate open/fdopen would contribute to that. >> > >> > But, let's hear from Markus. >> >> This was my best attempt to open the file read/write, creating it if it >> doesn't exist. >> >> Plain >> >> f = open(pathname, "r+", encoding='utf-8') >> >> fails instead of creates, and >> >> f = open(pathname, "w+", encoding='utf-8') >> >> truncates. >> >> If you know a better way, tell me! > > IIUC, you need "a+" as the mode, rather than "w+"
Sure this lets me do f.seek(0) f.truncate(0) f.write(text) to overwrite the old contents on all systems? Documentation cautions: [...] 'a' for appending (which on some Unix systems, means that all writes append to the end of the file regardless of the current seek position).