You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
on Windows, the stat() function always returns True for some special
device names (nul, con, com1, lpt1...), even when followed by an extension.
Thus "import con" manages to find that "con.py" exists, and tries to
read from it... fun.
A solution is to use GetFileAttributes() instead.
Note that on python2.5.2, the error message suggest that we have such a
problem, but fortunately the error is still an ImportError::
>>> import nul
ImportError: DLL load failed: Le module spécifié est introuvable.
Sorry, I was not clear.
With python 2.5.2, "import nul" correctly raises ImportError, even if
the error message is slightly misleading.
With a recent release25-maint (and all other branches), "import nul"
does succeed, and creates an empty module.
"import con" seems to block, it actually waits for the user to enter
text and type ^Z. Then it prints to the console some bizarre text that
looks like the content of a .pyc file:
Python 2.5.3a0 (release25-maint, Jun 11 2008, 13:17:36) [MSC v.1200 32
bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import con
^Z
a=1
b=2
c=3
^Z
│≥
c ☺ @ s► d Z d☺ Z☺ d☻ S(♥ i☻ i♥ N(☻ t☺ bt☺
c( ( ( s♠ con.py <module>☺ s☻ ♠☺ [27520 refs]
>>> dir(con)
['__builtins__', '__doc__', '__file__', '__name__', 'b', 'c']
[27533 refs]
Since I don't have access to Windows I am unassigning. Amaury, if this
is still a problem should we go ahead and switch to
GetFileAttributesEx()? Or just realize this is a problem for people
developing Python?
it is likely that the new import library will correct the problem.
Did it?
With standard 3.1.2,
>>> import nul
...
ImportError: DLL load failed: The specified module could not be found.
>>> import con
...
ImportError: No module named con
So is there any problem with 2.7, or should we close this?
I am not sure that I fully understand the issue - but it seems that trunk still has this issue.
As stated by Amaury - this is on DEBUG builds only.
c:\>pcbuild\python_d.exe
Python 3.3a0 (default, May 28 2011, 20:22:11) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import nul
[60967 refs]
>>> import con
^Z
[60986 refs]
c:\>PCbuild\python.exe
Python 3.3a0 (default, May 28 2011, 20:25:13) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import nul
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: The parameter is incorrect.
>>> import con
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: The specified module could not be found.
>>>
This one seems to have been fixed by the importlib rebuild. I haven't bothered to trace the code path, but certainly "import nul" returns the expected "ImportError: No module named 'nul'" in both Debug & Release builds.
Activity
amauryfa commentedon Jun 13, 2008
on Windows, the stat() function always returns True for some special
device names (nul, con, com1, lpt1...), even when followed by an extension.
Thus "import con" manages to find that "con.py" exists, and tries to
read from it... fun.
A solution is to use GetFileAttributes() instead.
birkenfeld commentedon Jun 13, 2008
The title is misleading -- if what you show is correct then "import nul"
doesn't succeed :)
amauryfa commentedon Jun 13, 2008
Sorry, I was not clear.
With python 2.5.2, "import nul" correctly raises ImportError, even if
the error message is slightly misleading.
With a recent release25-maint (and all other branches), "import nul"
does succeed, and creates an empty module.
"import con" seems to block, it actually waits for the user to enter
text and type ^Z. Then it prints to the console some bizarre text that
looks like the content of a .pyc file:
amauryfa commentedon Jun 13, 2008
I was wrong. It seems that an installed python works correctly, but a
python running from its build directory has the problem.
amauryfa commentedon Jun 13, 2008
OK, I think I got is now. The difference is between debug and release
builds.
Explanation:
It then tries LoadLibrary("nul.pyd"), which fails with a DLL error.
fails. It then tries stat("nul.py"), which succeeds to return an empty file!
Whaaaa.
ocean-city commentedon Jul 1, 2008
GetFileAttributes() succeeds for "nul", but GetFileAttributesEx() fails.
Maybe is it good idea to use GetFileAttributesEx()?
# test code
print dll.GetFileAttributesA("nul") # 32
print dll.GetFileAttributesExA("nul", GetFileExInfoStandard,
ctypes.byref(wfad)) # 0
brettcannon commentedon Mar 11, 2009
Since I don't have access to Windows I am unassigning. Amaury, if this
is still a problem should we go ahead and switch to
GetFileAttributesEx()? Or just realize this is a problem for people
developing Python?
amauryfa commentedon Mar 11, 2009
It's a problem with debug builds on Windows.
Lowering priority.
Also, it is likely that the new import library will correct the problem.
terryjreedy commentedon Aug 4, 2010
Did it?
So is there any problem with 2.7, or should we close this?
merwok commentedon Aug 4, 2010
3.1 does not use importlib for imports.
markm commentedon May 28, 2011
I am not sure that I fully understand the issue - but it seems that trunk still has this issue.
As stated by Amaury - this is on DEBUG builds only.
tjguk commentedon Jul 31, 2013
This one seems to have been fixed by the importlib rebuild. I haven't bothered to trace the code path, but certainly "import nul" returns the expected "ImportError: No module named 'nul'" in both Debug & Release builds.