Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
ae882f79
Commit
ae882f79
authored
Aug 30, 2004
by
Johannes Gijsbers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Patch #941486: add os.path.lexists(). Also fix bug #940578 by using lexists in glob.glob.
parent
d3f61a2d
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
57 additions
and
4 deletions
+57
-4
Doc/lib/libglob.tex
Doc/lib/libglob.tex
+1
-0
Doc/lib/libposixpath.tex
Doc/lib/libposixpath.tex
+9
-0
Lib/glob.py
Lib/glob.py
+2
-2
Lib/macpath.py
Lib/macpath.py
+13
-1
Lib/ntpath.py
Lib/ntpath.py
+2
-1
Lib/os2emxpath.py
Lib/os2emxpath.py
+2
-0
Lib/plat-riscos/riscospath.py
Lib/plat-riscos/riscospath.py
+2
-0
Lib/posixpath.py
Lib/posixpath.py
+11
-0
Lib/test/test_glob.py
Lib/test/test_glob.py
+10
-0
Lib/test/test_posixpath.py
Lib/test/test_posixpath.py
+2
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Doc/lib/libglob.tex
View file @
ae882f79
...
...
@@ -21,6 +21,7 @@ which must be a string containing a path specification.
\var
{
pathname
}
can be either absolute (like
\file
{
/usr/src/Python-1.5/Makefile
}
) or relative (like
\file
{
../../Tools/*/*.gif
}
), and can contain shell-style wildcards.
Broken symlinks are included in the results (as in the shell).
\end{funcdesc}
For example, consider a directory containing only the following files:
...
...
Doc/lib/libposixpath.tex
View file @
ae882f79
...
...
@@ -43,6 +43,15 @@ half of the pair returned by \code{split(\var{path})}.
\begin{funcdesc}
{
exists
}{
path
}
Return
\code
{
True
}
if
\var
{
path
}
refers to an existing path.
Returns
\code
{
False
}
for broken symbolic links.
\end{funcdesc}
\begin{funcdesc}
{
lexists
}{
path
}
Return
\code
{
True
}
if
\var
{
path
}
refers to an existing path.
Returns
\code
{
True
}
for broken symbolic links.
Equivalent to
\function
{
exists()
}
on platforms lacking
\function
{
os.lstat()
}
.
\versionadded
{
2.4
}
\end{funcdesc}
\begin{funcdesc}
{
expanduser
}{
path
}
...
...
Lib/glob.py
View file @
ae882f79
...
...
@@ -13,7 +13,7 @@ def glob(pathname):
"""
if
not
has_magic
(
pathname
):
if
os
.
path
.
exists
(
pathname
):
if
os
.
path
.
l
exists
(
pathname
):
return
[
pathname
]
else
:
return
[]
...
...
@@ -29,7 +29,7 @@ def glob(pathname):
for
dirname
in
list
:
if
basename
or
os
.
path
.
isdir
(
dirname
):
name
=
os
.
path
.
join
(
dirname
,
basename
)
if
os
.
path
.
exists
(
name
):
if
os
.
path
.
l
exists
(
name
):
result
.
append
(
name
)
else
:
result
=
[]
...
...
Lib/macpath.py
View file @
ae882f79
...
...
@@ -150,7 +150,7 @@ def getctime(filename):
return
os
.
stat
(
filename
).
st_ctime
def
exists
(
s
):
"""
Return True if the pathname refers to an existing file or directory."""
"""
Test whether a path exists. Returns False for broken symbolic links"""
try
:
st
=
os
.
stat
(
s
)
...
...
@@ -158,6 +158,18 @@ def exists(s):
return
False
return
True
# Is `stat`/`lstat` a meaningful difference on the Mac? This is safe in any
# case.
def
lexists
(
path
):
"""Test whether a path exists. Returns True for broken symbolic links"""
try
:
st
=
os
.
lstat
(
path
)
except
os
.
error
:
return
False
return
True
# Return the longest prefix of all list elements.
def
commonprefix
(
m
):
...
...
Lib/ntpath.py
View file @
ae882f79
...
...
@@ -249,7 +249,6 @@ def islink(path):
# Does a path exist?
# This is false for dangling symbolic links.
def
exists
(
path
):
"""Test whether a path exists"""
...
...
@@ -259,6 +258,8 @@ def exists(path):
return
False
return
True
lexists
=
exists
# Is a path a dos directory?
# This follows symbolic links, so both islink() and isdir() can be true
...
...
Lib/os2emxpath.py
View file @
ae882f79
...
...
@@ -220,6 +220,8 @@ def exists(path):
return
False
return
True
lexists
=
exists
# Is a path a directory?
...
...
Lib/plat-riscos/riscospath.py
View file @
ae882f79
...
...
@@ -218,6 +218,8 @@ def exists(p):
except
swi
.
error
:
return
0
lexists
=
exists
def
isdir
(
p
):
"""
...
...
Lib/posixpath.py
View file @
ae882f79
...
...
@@ -174,6 +174,17 @@ def exists(path):
return
True
# Being true for dangling symbolic links is also useful.
def
lexists
(
path
):
"""Test whether a path exists. Returns True for broken symbolic links"""
try
:
st
=
os
.
lstat
(
path
)
except
os
.
error
:
return
False
return
True
# Is a path a directory?
# This follows symbolic links, so both islink() and isdir() can be true
# for the same path.
...
...
Lib/test/test_glob.py
View file @
ae882f79
...
...
@@ -48,6 +48,9 @@ class GlobTests(unittest.TestCase):
self
.
mktemp
(
'ZZZ'
)
self
.
mktemp
(
'a'
,
'bcd'
,
'EF'
)
self
.
mktemp
(
'a'
,
'bcd'
,
'efg'
,
'ha'
)
if
hasattr
(
os
,
'symlink'
):
os
.
symlink
(
self
.
norm
(
'broken'
),
self
.
norm
(
'sym1'
))
os
.
symlink
(
self
.
norm
(
'broken'
),
self
.
norm
(
'sym2'
))
def
tearDown
(
self
):
deltree
(
self
.
tempdir
)
...
...
@@ -98,6 +101,13 @@ class GlobTests(unittest.TestCase):
eq
(
self
.
glob
(
'?a?'
,
'*F'
),
map
(
self
.
norm
,
[
os
.
path
.
join
(
'aaa'
,
'zzzF'
),
os
.
path
.
join
(
'aab'
,
'F'
)]))
def
test_glob_broken_symlinks
(
self
):
if
hasattr
(
os
,
'symlink'
):
eq
=
self
.
assertSequencesEqual_noorder
eq
(
self
.
glob
(
'sym*'
),
[
self
.
norm
(
'sym1'
),
self
.
norm
(
'sym2'
)])
eq
(
self
.
glob
(
'sym1'
),
[
self
.
norm
(
'sym1'
)])
eq
(
self
.
glob
(
'sym2'
),
[
self
.
norm
(
'sym2'
)])
def
test_main
():
run_unittest
(
GlobTests
)
...
...
Lib/test/test_posixpath.py
View file @
ae882f79
...
...
@@ -150,6 +150,7 @@ class PosixPathTest(unittest.TestCase):
os
.
remove
(
test_support
.
TESTFN
+
"1"
)
self
.
assertIs
(
posixpath
.
islink
(
test_support
.
TESTFN
+
"2"
),
True
)
self
.
assertIs
(
posixpath
.
exists
(
test_support
.
TESTFN
+
"2"
),
False
)
self
.
assertIs
(
posixpath
.
lexists
(
test_support
.
TESTFN
+
"2"
),
True
)
finally
:
if
not
f
.
close
():
f
.
close
()
...
...
@@ -171,6 +172,7 @@ class PosixPathTest(unittest.TestCase):
f
.
write
(
"foo"
)
f
.
close
()
self
.
assertIs
(
posixpath
.
exists
(
test_support
.
TESTFN
),
True
)
self
.
assertIs
(
posixpath
.
lexists
(
test_support
.
TESTFN
),
True
)
finally
:
if
not
f
.
close
():
f
.
close
()
...
...
Misc/NEWS
View file @
ae882f79
...
...
@@ -79,6 +79,9 @@ Extension modules
Library
-------
-
Patch
#
941486
:
added
os
.
path
.
lexists
(),
which
returns
True
for
broken
symlinks
,
unlike
os
.
path
.
exists
().
-
the
random
module
now
uses
os
.
urandom
()
for
seeding
if
it
is
available
.
Added
a
new
generator
based
on
os
.
urandom
().
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment