Issue5913
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) * ![]() |
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) * ![]() |
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) * ![]() |
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) * ![]() |
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) * ![]() |
Date: 2009-05-04 01:51 | |
I hope attached patch works.
>>> import os
>>> os.listdir("")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
WindowsError: [Error 3] 指定されたパスが見つかりません。: ''
[36200 refs]
>>> os.listdir(u"")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
WindowsError: [Error 3] 指定されたパスが見つかりません。: u''
# Error message says "Cannot find specified path"
|
|||
| msg87095 - (view) | Author: Hirokazu Yamamoto (ocean-city) * ![]() |
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) * ![]() |
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) * ![]() |
Date: 2009-05-04 05:59 | |
Committed in r72273(trunk) and r72274(py3k). |
|||
| msg87101 - (view) | Author: Ezio Melotti (ezio.melotti) * ![]() |
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: + msg87101 |
| 2009-05-04 05:59:55 | ocean-city | set | status: open -> closed resolution: accepted -> fixed messages: + msg87099 |
| 2009-05-04 04:18:45 | loewis | set | assignee: ocean-city resolution: accepted messages: + msg87097 |
| 2009-05-04 02:01:25 | ocean-city | set | messages: + msg87095 |
| 2009-05-04 01:51:15 | ocean-city | set | files:
+ listdir_on_empty_path.patch nosy:
+ ocean-city keywords: + patch |
| 2009-05-03 22:22:06 | r.david.murray | set | nosy:
+ r.david.murray messages: + msg87080 |
| 2009-05-03 17:45:58 | loewis | set | messages: + msg87056 |
| 2009-05-03 17:36:55 | pitrou | set | priority: high versions: - Python 2.6, Python 2.5, Python 2.4, Python 3.0 nosy: + loewis, pitrou messages: + msg87054 stage: test needed |
| 2009-05-03 13:45:00 | ezio.melotti | create | |
