Make a unique filesystem path, without creating the file
Martin A. Brown
martin at linux-ip.net
Sun Feb 14 23:48:58 EST 2016
Good evening/morning Ben,
>> > I am unconcerned with whether there is a real filesystem entry of
>> > that name; the goal entails having no filesystem activity for this.
>> > I want a valid unique filesystem path, without touching the
>> > filesystem.
>>
>> Your phrasing is ambiguous.
>
>The existing behaviour of ‘tempfile.mktemp’ – actually of its
>internal class ‘tempfile._RandomNameSequence’ – is to generate
>unpredictable, unique, valid filesystem paths that are different
>each time.
>
>That's the behaviour I want, in a public API that exposes what
>‘tempfile’ already has implemented, documented in a way that
>doesn't create a scare about security.
If your code is not actually touching the filesystem, then it will
not be affected by the race condition identified in the
tempfile.mktemp() warning anyway. So, I'm unsure of your worry.
>> But if you explain in more detail why you want this filename, perhaps
>> we can come up with some ideas that will help.
>
>The behaviour is already implemented in the standard library. What
>I'm looking for is a way to use it (not re-implement it) that is
>public API and isn't scolded by the library documentation.
I might also suggest the (bound) method _create_tmp() on class
mailbox.Maildir, which achieves roughly the same goals, but for a
permanent file.
Of course, that particular method also touches the filesystem. The
Maildir naming approach is based on the assumptions* that time is
monotonically increasing, that system nodes never share the same
name and that you don't need more than 1 uniquely named file per
directory per millisecond.
If so, then you can use the 9 or 10 lines of that method.
Good luck,
-Martin
* I was tempted to joke about these two guarantees, but I think
that undermines my basic message. To wit, you can probably rely
on this naming technique about as much as you can rely on your
system clock. I'll assume that you aren't naming all of your
nodes 'franklin.p.gundersnip'.
--
Martin A. Brown
http://linux-ip.net/
More information about the Python-list
mailing list