Issue 5913: On Windows os.listdir('') -> cwd and os.listdir(u'') -> C:\ (original) (raw)

Created on 2009-05-03 13:44 by ezio.melotti, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
listdir_on_empty_path.patch ocean-city,2009-05-04 01:51
Messages (9)
msg87045 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2009-05-03 13:44
On Windows, with Python2/Python3, os.listdir('')/os.listdir(b'') list the content of the current working directory and os.listdir(u'')/os.listdir('') the content of C:\. On Linux the error "OSError: [Errno 2] No such file or directory: ''" is raised. I also noticed that os.listdir('C:') (without the \) lists the content of the cwd too.
msg87054 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-05-03 17:36
As for the "C:" behaviour, I think it is normal: you are not specifying the path itself, only the drive letter, so it uses the current path in the specified drive (which /is/ cwd if you are already running from C:, but may be something else if running from another drive). As for '' and b'', I think that ambiguity is bad and these values should be prohibited by Python (ValueError comes to mind).
msg87056 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2009-05-03 17:45
Before anything is changed, I would first like to understand where the difference comes from. If it gives ENOENT on Unix, it should also give ENOENT on Windows (rather than giving ValueError). In addition, it should also give what open("")/open(b"") gives - as it really is the request to open the directory named "". (disclaimer: I haven done any tests or code review yet)
msg87080 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2009-05-03 22:22
On Sun, 3 May 2009 at 17:36, Antoine Pitrou wrote: > As for the "C:" behaviour, I think it is normal: you are not specifying > the path itself, only the drive letter, so it uses the current path in > the specified drive (which /is/ cwd if you are already running from C:, > but may be something else if running from another drive). It is normal behavior for Windows. Try it with the 'dir' command in a command window. (That said, I have no idea, not being a Windows user, how Windows decides what the 'current' directory is on any given drive from any given context).
msg87094 - (view) Author: Hirokazu Yamamoto (ocean-city) * (Python committer) Date: 2009-05-04 01:51
I hope attached patch works. >>> import os >>> os.listdir("") Traceback (most recent call last): File "", line 1, in WindowsError: [Error 3] 指定されたパスが見つかりません。: '' [36200 refs] >>> os.listdir(u"") Traceback (most recent call last): File "", line 1, in WindowsError: [Error 3] 指定されたパスが見つかりません。: u'' # Error message says "Cannot find specified path"
msg87095 - (view) Author: Hirokazu Yamamoto (ocean-city) * (Python committer) Date: 2009-05-04 02:01
For u"", os.listdir calls FindFirstFileW with u"\\*.*", For "", os.listdir calls FindFirstFileA with "*.*". The code before FindFirstFile[AW] is slightly different for empty path.
msg87097 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2009-05-04 04:18
Hirokazu, the patch looks fine, please apply to 2.7 and 3k. I wouldn't backport it to 2.6/3.0, since it may break existing code.
msg87099 - (view) Author: Hirokazu Yamamoto (ocean-city) * (Python committer) Date: 2009-05-04 05:59
Committed in r72273(trunk) and r72274(py3k).
msg87101 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2009-05-04 06:21
> It is normal behavior for Windows. Try it with the 'dir' command > in a command window. (That said, I have no idea, not being a > Windows user, how Windows decides what the 'current' directory > is on any given drive from any given context). Yes, I tried to run cmd.exe and I did: C:\> cd D:\foo C:\> cd E:\foo C:\> python os.listdir('D:') and os.listdir('E:') then listed the content of D:\foo and E:\bar. This is the correct behaviour, even if it's not documented. The CWD is the one where Python has been launched, and apparently on the other drives is the root folder by default, if it's not changed with the cd command. Thanks Hirokazu for the patch.
History
Date User Action Args
2022-04-11 14:56:48 admin set github: 50163
2009-05-29 02:46:22 benjamin.peterson link issue818059 superseder
2009-05-04 06:21:53 ezio.melotti set messages: +
2009-05-04 05:59:55 ocean-city set status: open -> closedresolution: accepted -> fixedmessages: +
2009-05-04 04🔞45 loewis set assignee: ocean-cityresolution: acceptedmessages: +
2009-05-04 02:01:25 ocean-city set messages: +
2009-05-04 01:51:15 ocean-city set files: + listdir_on_empty_path.patchnosy: + ocean-citymessages: + keywords: + patch
2009-05-03 22:22:06 r.david.murray set nosy: + r.david.murraymessages: +
2009-05-03 17:45:58 loewis set messages: +
2009-05-03 17:36:55 pitrou set priority: highversions: - Python 2.6, Python 2.5, Python 2.4, Python 3.0nosy: + loewis, pitroumessages: + stage: test needed
2009-05-03 13:45:00 ezio.melotti create