python 2.7.12 on Linux behaving differently than on Windows

Marko Rauhamaa marko at
Fri Dec 9 13:40:14 EST 2016

Steve D'Aprano <steve+python at>:

> On Fri, 9 Dec 2016 09:34 pm, Marko Rauhamaa wrote:
>> Steve D'Aprano <steve+python at>:
>>> No that's incorrect. It isn't that . and .. are forbidden, but they
>>> are reserved: every single directory in Unix file systems have a .
>>> and .. directory entry. So they are legitimate directory names --
>>> they're just not names you can use for your own files, as they are
>>> already in use.
>> Same difference.
> Of course they are different.

You are not allowed to name your next file "." or ".." or "1/8".

>> you could have defined pathnames as lists of strings. Then,
>> everything would be unambigous and there wouldn't be any taboo or
>> reserved names.
> I really don't think so.
> So what path does [] represent?

That's the root directory.

> How do you distinguish between the root directory / and no pathname at
> all in a syntactically correct, unambiguous manner, using only lists?

I don't know what you mean.

> What path does [[]] represent? How about [[], []]?

Those are not lists of strings (see above).

> Here's a nice one for you to think about:
> L = []; L.append(L)
> What path does L represent?

That's not a list of strings.

> How would it be represented in the file system?
> What about this "path"? [None, 23, float('NAN'), {}]

That's not a list of strings.

> What's the difference between ['a', 'b', 'c'] and ['a', ['b', ['c']]] as
> path names?

Only the first one is a legal pathname.

> How do you represent the current and previous directory in a list
> without reserving identifiers for them?

My idea covered absolute pathnames only.

> How do you distinguish between '/home/steve' and '/home/steve/' for those
> programs that (rightly or wrongly) need to distinguish them?

I wouldn't. That distinction would have to be made some other way.

> How do you handle alternate data streams? Or versioning information, for
> systems like VMS that track that?

I am only talking about pathnames.

> What about file systems where you can have multiple roots? E.g. Windows, C
> \file versus D:\file and classic Mac Floppy:file and HardDrive:file?

I would only have one root.

> Do you really imagine that if Python were a shell, and required system
> administrators to write things like:
> mount ['dev', 'dvd'] ['mount', 'dvd']
> instead of
> mount /dev/dvd /mount/dvd
> that it would have been a success?

Dunno. I've been burned by bash so often that solid ground is what I
yearn for most.

>> BTW, guile allows *any* characters in an identifier. Even the empty name
>> is a valid identifier:
> And are Guile programs improved by having the empty string as an
> identify?

Point is, it's not at all impossible to remove the limitations on what
can go in names, filenames or otherwise.

> When was the last time you were coding and you thought "This program
> would be so much easier to understand and maintain if only I could
> name this the empty string"?

Having to be on constant lookout for corner cases is the problem.


More information about the Python-list mailing list