<br><br><div class="gmail_quote">On Mon, Aug 15, 2011 at 1:42 PM, Devin Jeanpierre <span dir="ltr"><<a href="mailto:jeanpierreda@gmail.com" target="_blank">jeanpierreda@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div>> open(), in my opinon, already behaves as it should.<br>
<br>
</div>open(..., 'w') doesn't, it overwrites the target. For copying an<br>
individual file, you'd want os.open(..., O_EXCL | O_CREAT), which is a<br>
cross-platform, race-condition-free way of creating and writing to a<br>
single file provided it didn't exist before.<br>
<div><br></div></blockquote><div>Good point.  Perhaps the best way of improving this would be to add a 'c' mode to the builtin open() for creating new files, so that typical usage would be open(file, 'cw').  Or maybe 'c' should imply 'w', since there seems little point in creating a new file read-only. </div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>
> From what I've read, there are several ways of ensuring that these functions<br>
> fail if destination exists depending on the platform and filesystem, but<br>
> there is no uniform way to do it. One approach would be to try all possible<br>
> methods and hope that at least one works, with a simple "if os.exists(dst):<br>
> fail" fallback.  The documentation would state that "An exception occurs if<br>
> the destination exists.  This check is done is as safe a way possible to<br>
> avoid race conditions where the system supports it."<br>
<br>
</div>There are two attitudes to take when using the don't-overwrite argument:<br>
<br>
1. User cares about safety and race conditions, is glad that this<br>
function tries to be safe.<br>
<br>
2. User doesn't care about safety or race conditions, as User doesn't<br>
have shell scripts creating files at inconvenient times and tempting<br>
fate.<br>
<br>
In case 1, having it silently revert to the unsafe version is very<br>
bad, and potentially damaging. In case 2, the user doesn't care about<br>
the safe version. In fact, User 2 is probably using os.path.exists<br>
already.<br>
<br>
If it can't do things safely, it shouldn't do them at all.</blockquote><div><br></div><div>So we provide an alternate safe implementation, which may not work on all systems? And it will be up to the user to decide whether to fall back to the unsafe functions?</div>
</div>