Linux premium155.web-hosting.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
LiteSpeed
: 162.0.235.200 | : 18.227.114.218
Cant Read [ /etc/named.conf ]
7.4.33
varifktc
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
opt /
alt /
python33 /
lib64 /
python3.3 /
[ HOME SHELL ]
Name
Size
Permission
Action
__pycache__
[ DIR ]
drwxr-xr-x
collections
[ DIR ]
drwxr-xr-x
concurrent
[ DIR ]
drwxr-xr-x
config-3.3m
[ DIR ]
drwxr-xr-x
ctypes
[ DIR ]
drwxr-xr-x
curses
[ DIR ]
drwxr-xr-x
dbm
[ DIR ]
drwxr-xr-x
distutils
[ DIR ]
drwxr-xr-x
email
[ DIR ]
drwxr-xr-x
encodings
[ DIR ]
drwxr-xr-x
html
[ DIR ]
drwxr-xr-x
http
[ DIR ]
drwxr-xr-x
idlelib
[ DIR ]
drwxr-xr-x
importlib
[ DIR ]
drwxr-xr-x
json
[ DIR ]
drwxr-xr-x
lib-dynload
[ DIR ]
drwxr-xr-x
lib2to3
[ DIR ]
drwxr-xr-x
logging
[ DIR ]
drwxr-xr-x
multiprocessing
[ DIR ]
drwxr-xr-x
plat-linux
[ DIR ]
drwxr-xr-x
pydoc_data
[ DIR ]
drwxr-xr-x
site-packages
[ DIR ]
drwxr-xr-x
sqlite3
[ DIR ]
drwxr-xr-x
test
[ DIR ]
drwxr-xr-x
unittest
[ DIR ]
drwxr-xr-x
urllib
[ DIR ]
drwxr-xr-x
venv
[ DIR ]
drwxr-xr-x
wsgiref
[ DIR ]
drwxr-xr-x
xml
[ DIR ]
drwxr-xr-x
xmlrpc
[ DIR ]
drwxr-xr-x
__future__.py
4.48
KB
-rw-r--r--
__phello__.foo.py
64
B
-rw-r--r--
_compat_pickle.py
4.24
KB
-rw-r--r--
_dummy_thread.py
4.66
KB
-rw-r--r--
_markupbase.py
14.26
KB
-rw-r--r--
_osx_support.py
18.41
KB
-rw-r--r--
_pyio.py
71.2
KB
-rw-r--r--
_strptime.py
21.17
KB
-rw-r--r--
_sysconfigdata.py
22.31
KB
-rw-r--r--
_threading_local.py
7.24
KB
-rw-r--r--
_weakrefset.py
5.57
KB
-rw-r--r--
abc.py
7.87
KB
-rw-r--r--
aifc.py
30.33
KB
-rw-r--r--
antigravity.py
475
B
-rw-r--r--
argparse.py
86.98
KB
-rw-r--r--
ast.py
11.86
KB
-rw-r--r--
asynchat.py
11.32
KB
-rw-r--r--
asyncore.py
20.27
KB
-rw-r--r--
base64.py
13.66
KB
-rwxr-xr-x
bdb.py
21.38
KB
-rw-r--r--
binhex.py
13.39
KB
-rw-r--r--
bisect.py
2.53
KB
-rw-r--r--
bz2.py
18.04
KB
-rw-r--r--
cProfile.py
6.21
KB
-rwxr-xr-x
calendar.py
22.4
KB
-rw-r--r--
cgi.py
34.72
KB
-rwxr-xr-x
cgitb.py
11.76
KB
-rw-r--r--
chunk.py
5.25
KB
-rw-r--r--
cmd.py
14.51
KB
-rw-r--r--
code.py
9.79
KB
-rw-r--r--
codecs.py
35.11
KB
-rw-r--r--
codeop.py
5.85
KB
-rw-r--r--
colorsys.py
3.6
KB
-rw-r--r--
compileall.py
9.51
KB
-rw-r--r--
configparser.py
48.28
KB
-rw-r--r--
contextlib.py
8.91
KB
-rw-r--r--
copy.py
8.78
KB
-rw-r--r--
copyreg.py
6.46
KB
-rw-r--r--
crypt.py
1.83
KB
-rw-r--r--
csv.py
15.81
KB
-rw-r--r--
datetime.py
73.2
KB
-rw-r--r--
decimal.py
223.2
KB
-rw-r--r--
difflib.py
80.58
KB
-rw-r--r--
dis.py
9.9
KB
-rw-r--r--
doctest.py
100.52
KB
-rw-r--r--
dummy_threading.py
2.75
KB
-rw-r--r--
filecmp.py
9.37
KB
-rw-r--r--
fileinput.py
13.92
KB
-rw-r--r--
fnmatch.py
3.09
KB
-rw-r--r--
formatter.py
14.58
KB
-rw-r--r--
fractions.py
22.49
KB
-rw-r--r--
ftplib.py
39.31
KB
-rw-r--r--
functools.py
13.28
KB
-rw-r--r--
genericpath.py
3.02
KB
-rw-r--r--
getopt.py
7.31
KB
-rw-r--r--
getpass.py
5.66
KB
-rw-r--r--
gettext.py
20.15
KB
-rw-r--r--
glob.py
2.77
KB
-rw-r--r--
gzip.py
23.83
KB
-rw-r--r--
hashlib.py
6.05
KB
-rw-r--r--
heapq.py
17.58
KB
-rw-r--r--
hmac.py
4.34
KB
-rw-r--r--
imaplib.py
48.94
KB
-rw-r--r--
imghdr.py
3.45
KB
-rw-r--r--
imp.py
9.5
KB
-rw-r--r--
inspect.py
77.11
KB
-rw-r--r--
io.py
3.2
KB
-rw-r--r--
ipaddress.py
68.66
KB
-rw-r--r--
keyword.py
2.01
KB
-rwxr-xr-x
linecache.py
3.77
KB
-rw-r--r--
locale.py
91.03
KB
-rw-r--r--
lzma.py
17.04
KB
-rw-r--r--
macpath.py
5.49
KB
-rw-r--r--
macurl2path.py
2.67
KB
-rw-r--r--
mailbox.py
77.24
KB
-rw-r--r--
mailcap.py
7.26
KB
-rw-r--r--
mimetypes.py
20.25
KB
-rw-r--r--
modulefinder.py
22.65
KB
-rw-r--r--
netrc.py
5.61
KB
-rw-r--r--
nntplib.py
41.78
KB
-rw-r--r--
ntpath.py
19.96
KB
-rw-r--r--
nturl2path.py
2.34
KB
-rw-r--r--
numbers.py
10.15
KB
-rw-r--r--
opcode.py
4.98
KB
-rw-r--r--
optparse.py
58.93
KB
-rw-r--r--
os.py
33.96
KB
-rw-r--r--
os2emxpath.py
4.55
KB
-rw-r--r--
pdb.py
59.23
KB
-rwxr-xr-x
pickle.py
46.74
KB
-rw-r--r--
pickletools.py
79.44
KB
-rw-r--r--
pipes.py
8.71
KB
-rw-r--r--
pkgutil.py
21.03
KB
-rw-r--r--
platform.py
49.55
KB
-rwxr-xr-x
plistlib.py
14.43
KB
-rw-r--r--
poplib.py
11.11
KB
-rw-r--r--
posixpath.py
13.92
KB
-rw-r--r--
pprint.py
12.4
KB
-rw-r--r--
profile.py
20.95
KB
-rwxr-xr-x
pstats.py
25.75
KB
-rw-r--r--
pty.py
4.94
KB
-rw-r--r--
py_compile.py
6.56
KB
-rw-r--r--
pyclbr.py
13.12
KB
-rw-r--r--
pydoc.py
99.26
KB
-rwxr-xr-x
queue.py
8.63
KB
-rw-r--r--
quopri.py
7.14
KB
-rwxr-xr-x
random.py
25.06
KB
-rw-r--r--
re.py
14.62
KB
-rw-r--r--
reprlib.py
4.99
KB
-rw-r--r--
rlcompleter.py
5.4
KB
-rw-r--r--
runpy.py
10.17
KB
-rw-r--r--
sched.py
6.25
KB
-rw-r--r--
shelve.py
8.05
KB
-rw-r--r--
shlex.py
11.23
KB
-rw-r--r--
shutil.py
38.23
KB
-rw-r--r--
site.py
21.46
KB
-rw-r--r--
smtpd.py
29.5
KB
-rwxr-xr-x
smtplib.py
37.13
KB
-rwxr-xr-x
sndhdr.py
6.07
KB
-rw-r--r--
socket.py
14.56
KB
-rw-r--r--
socketserver.py
23.63
KB
-rw-r--r--
sre_compile.py
15.96
KB
-rw-r--r--
sre_constants.py
7.06
KB
-rw-r--r--
sre_parse.py
29.5
KB
-rw-r--r--
ssl.py
23.9
KB
-rw-r--r--
stat.py
4.2
KB
-rw-r--r--
string.py
9.19
KB
-rw-r--r--
stringprep.py
12.61
KB
-rw-r--r--
struct.py
238
B
-rw-r--r--
subprocess.py
65.99
KB
-rw-r--r--
sunau.py
17.11
KB
-rw-r--r--
symbol.py
2
KB
-rwxr-xr-x
symtable.py
7.21
KB
-rw-r--r--
sysconfig.py
24.58
KB
-rw-r--r--
tabnanny.py
11.14
KB
-rwxr-xr-x
tarfile.py
86.78
KB
-rwxr-xr-x
telnetlib.py
26.71
KB
-rw-r--r--
tempfile.py
22.47
KB
-rw-r--r--
textwrap.py
16.1
KB
-rw-r--r--
this.py
1003
B
-rw-r--r--
threading.py
44.57
KB
-rw-r--r--
timeit.py
12.1
KB
-rwxr-xr-x
token.py
2.96
KB
-rw-r--r--
tokenize.py
24.29
KB
-rw-r--r--
trace.py
30.75
KB
-rwxr-xr-x
traceback.py
11.7
KB
-rw-r--r--
tty.py
879
B
-rw-r--r--
types.py
3.09
KB
-rw-r--r--
uu.py
6.61
KB
-rwxr-xr-x
uuid.py
21.83
KB
-rw-r--r--
warnings.py
13.5
KB
-rw-r--r--
wave.py
18.14
KB
-rw-r--r--
weakref.py
11.23
KB
-rw-r--r--
webbrowser.py
22.38
KB
-rwxr-xr-x
xdrlib.py
5.25
KB
-rw-r--r--
zipfile.py
64.87
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : ntpath.py
# Module 'ntpath' -- common operations on WinNT/Win95 pathnames """Common pathname manipulations, WindowsNT/95 version. Instead of importing this module directly, import os and refer to this module as os.path. """ import os import sys import stat import genericpath from genericpath import * __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", "getatime","getctime", "islink","exists","lexists","isdir","isfile", "ismount", "expanduser","expandvars","normpath","abspath", "splitunc","curdir","pardir","sep","pathsep","defpath","altsep", "extsep","devnull","realpath","supports_unicode_filenames","relpath", "samefile", "sameopenfile",] # strings representing various path-related bits and pieces # These are primarily for export; internally, they are hardcoded. curdir = '.' pardir = '..' extsep = '.' sep = '\\' pathsep = ';' altsep = '/' defpath = '.;C:\\bin' if 'ce' in sys.builtin_module_names: defpath = '\\Windows' elif 'os2' in sys.builtin_module_names: # OS/2 w/ VACPP altsep = '/' devnull = 'nul' def _get_empty(path): if isinstance(path, bytes): return b'' else: return '' def _get_sep(path): if isinstance(path, bytes): return b'\\' else: return '\\' def _get_altsep(path): if isinstance(path, bytes): return b'/' else: return '/' def _get_bothseps(path): if isinstance(path, bytes): return b'\\/' else: return '\\/' def _get_dot(path): if isinstance(path, bytes): return b'.' else: return '.' def _get_colon(path): if isinstance(path, bytes): return b':' else: return ':' def _get_special(path): if isinstance(path, bytes): return (b'\\\\.\\', b'\\\\?\\') else: return ('\\\\.\\', '\\\\?\\') # Normalize the case of a pathname and map slashes to backslashes. # Other normalizations (such as optimizing '../' away) are not done # (this is done by normpath). def normcase(s): """Normalize case of pathname. Makes all characters lowercase and all slashes into backslashes.""" if not isinstance(s, (bytes, str)): raise TypeError("normcase() argument must be str or bytes, " "not '{}'".format(s.__class__.__name__)) return s.replace(_get_altsep(s), _get_sep(s)).lower() # Return whether a path is absolute. # Trivial in Posix, harder on Windows. # For Windows it is absolute if it starts with a slash or backslash (current # volume), or if a pathname after the volume-letter-and-colon or UNC-resource # starts with a slash or backslash. def isabs(s): """Test whether a path is absolute""" s = splitdrive(s)[1] return len(s) > 0 and s[:1] in _get_bothseps(s) # Join two (or more) paths. def join(path, *paths): sep = _get_sep(path) seps = _get_bothseps(path) colon = _get_colon(path) result_drive, result_path = splitdrive(path) for p in paths: p_drive, p_path = splitdrive(p) if p_path and p_path[0] in seps: # Second path is absolute if p_drive or not result_drive: result_drive = p_drive result_path = p_path continue elif p_drive and p_drive != result_drive: if p_drive.lower() != result_drive.lower(): # Different drives => ignore the first path entirely result_drive = p_drive result_path = p_path continue # Same drive in different case result_drive = p_drive # Second path is relative to the first if result_path and result_path[-1] not in seps: result_path = result_path + sep result_path = result_path + p_path ## add separator between UNC and non-absolute path if (result_path and result_path[0] not in seps and result_drive and result_drive[-1:] != colon): return result_drive + sep + result_path return result_drive + result_path # Split a path in a drive specification (a drive letter followed by a # colon) and the path specification. # It is always true that drivespec + pathspec == p def splitdrive(p): """Split a pathname into drive/UNC sharepoint and relative path specifiers. Returns a 2-tuple (drive_or_unc, path); either part may be empty. If you assign result = splitdrive(p) It is always true that: result[0] + result[1] == p If the path contained a drive letter, drive_or_unc will contain everything up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") If the path contained a UNC path, the drive_or_unc will contain the host name and share up to but not including the fourth directory separator character. e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") Paths cannot contain both a drive letter and a UNC path. """ empty = _get_empty(p) if len(p) > 1: sep = _get_sep(p) normp = p.replace(_get_altsep(p), sep) if (normp[0:2] == sep*2) and (normp[2:3] != sep): # is a UNC path: # vvvvvvvvvvvvvvvvvvvv drive letter or UNC path # \\machine\mountpoint\directory\etc\... # directory ^^^^^^^^^^^^^^^ index = normp.find(sep, 2) if index == -1: return empty, p index2 = normp.find(sep, index + 1) # a UNC path can't have two slashes in a row # (after the initial two) if index2 == index + 1: return empty, p if index2 == -1: index2 = len(p) return p[:index2], p[index2:] if normp[1:2] == _get_colon(p): return p[:2], p[2:] return empty, p # Parse UNC paths def splitunc(p): """Deprecated since Python 3.1. Please use splitdrive() instead; it now handles UNC paths. Split a pathname into UNC mount point and relative path specifiers. Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. Paths containing drive letters never have an UNC part. """ import warnings warnings.warn("ntpath.splitunc is deprecated, use ntpath.splitdrive instead", DeprecationWarning, 2) drive, path = splitdrive(p) if len(drive) == 2: # Drive letter present return p[:0], p return drive, path # Split a path in head (everything up to the last '/') and tail (the # rest). After the trailing '/' is stripped, the invariant # join(head, tail) == p holds. # The resulting head won't end in '/' unless it is the root. def split(p): """Split a pathname. Return tuple (head, tail) where tail is everything after the final slash. Either part may be empty.""" seps = _get_bothseps(p) d, p = splitdrive(p) # set i to index beyond p's last slash i = len(p) while i and p[i-1] not in seps: i -= 1 head, tail = p[:i], p[i:] # now tail has no slashes # remove trailing slashes from head, unless it's all slashes head2 = head while head2 and head2[-1:] in seps: head2 = head2[:-1] head = head2 or head return d + head, tail # Split a path in root and extension. # The extension is everything starting at the last dot in the last # pathname component; the root is everything before that. # It is always true that root + ext == p. def splitext(p): return genericpath._splitext(p, _get_sep(p), _get_altsep(p), _get_dot(p)) splitext.__doc__ = genericpath._splitext.__doc__ # Return the tail (basename) part of a path. def basename(p): """Returns the final component of a pathname""" return split(p)[1] # Return the head (dirname) part of a path. def dirname(p): """Returns the directory component of a pathname""" return split(p)[0] # Is a path a symbolic link? # This will always return false on systems where os.lstat doesn't exist. def islink(path): """Test whether a path is a symbolic link. This will always return false for Windows prior to 6.0 and for OS/2. """ try: st = os.lstat(path) except (os.error, AttributeError): return False return stat.S_ISLNK(st.st_mode) # 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, WindowsError): return False return True # Is a path a mount point? Either a root (with or without drive letter) # or an UNC path with at most a / or \ after the mount point. def ismount(path): """Test whether a path is a mount point (defined as root of drive)""" seps = _get_bothseps(path) root, rest = splitdrive(path) if root and root[0] in seps: return (not rest) or (rest in seps) return rest in seps # Expand paths beginning with '~' or '~user'. # '~' means $HOME; '~user' means that user's home directory. # If the path doesn't begin with '~', or if the user or $HOME is unknown, # the path is returned unchanged (leaving error reporting to whatever # function is called with the expanded path as argument). # See also module 'glob' for expansion of *, ? and [...] in pathnames. # (A function should also be defined to do full *sh-style environment # variable expansion.) def expanduser(path): """Expand ~ and ~user constructs. If user or $HOME is unknown, do nothing.""" if isinstance(path, bytes): tilde = b'~' else: tilde = '~' if not path.startswith(tilde): return path i, n = 1, len(path) while i < n and path[i] not in _get_bothseps(path): i += 1 if 'HOME' in os.environ: userhome = os.environ['HOME'] elif 'USERPROFILE' in os.environ: userhome = os.environ['USERPROFILE'] elif not 'HOMEPATH' in os.environ: return path else: try: drive = os.environ['HOMEDRIVE'] except KeyError: drive = '' userhome = join(drive, os.environ['HOMEPATH']) if isinstance(path, bytes): userhome = userhome.encode(sys.getfilesystemencoding()) if i != 1: #~user userhome = join(dirname(userhome), path[1:i]) return userhome + path[i:] # Expand paths containing shell variable substitutions. # The following rules apply: # - no expansion within single quotes # - '$$' is translated into '$' # - '%%' is translated into '%' if '%%' are not seen in %var1%%var2% # - ${varname} is accepted. # - $varname is accepted. # - %varname% is accepted. # - varnames can be made out of letters, digits and the characters '_-' # (though is not verified in the ${varname} and %varname% cases) # XXX With COMMAND.COM you can use any characters in a variable name, # XXX except '^|<>='. def expandvars(path): """Expand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.""" if isinstance(path, bytes): if ord('$') not in path and ord('%') not in path: return path import string varchars = bytes(string.ascii_letters + string.digits + '_-', 'ascii') quote = b'\'' percent = b'%' brace = b'{' dollar = b'$' environ = getattr(os, 'environb', None) else: if '$' not in path and '%' not in path: return path import string varchars = string.ascii_letters + string.digits + '_-' quote = '\'' percent = '%' brace = '{' dollar = '$' environ = os.environ res = path[:0] index = 0 pathlen = len(path) while index < pathlen: c = path[index:index+1] if c == quote: # no expansion within single quotes path = path[index + 1:] pathlen = len(path) try: index = path.index(c) res += c + path[:index + 1] except ValueError: res += path index = pathlen - 1 elif c == percent: # variable or '%' if path[index + 1:index + 2] == percent: res += c index += 1 else: path = path[index+1:] pathlen = len(path) try: index = path.index(percent) except ValueError: res += percent + path index = pathlen - 1 else: var = path[:index] try: if environ is None: value = os.fsencode(os.environ[os.fsdecode(var)]) else: value = environ[var] except KeyError: value = percent + var + percent res += value elif c == dollar: # variable or '$$' if path[index + 1:index + 2] == dollar: res += c index += 1 elif path[index + 1:index + 2] == brace: path = path[index+2:] pathlen = len(path) try: if isinstance(path, bytes): index = path.index(b'}') else: index = path.index('}') except ValueError: if isinstance(path, bytes): res += b'${' + path else: res += '${' + path index = pathlen - 1 else: var = path[:index] try: if environ is None: value = os.fsencode(os.environ[os.fsdecode(var)]) else: value = environ[var] except KeyError: if isinstance(path, bytes): value = b'${' + var + b'}' else: value = '${' + var + '}' res += value else: var = path[:0] index += 1 c = path[index:index + 1] while c and c in varchars: var += c index += 1 c = path[index:index + 1] try: if environ is None: value = os.fsencode(os.environ[os.fsdecode(var)]) else: value = environ[var] except KeyError: value = dollar + var res += value if c: index -= 1 else: res += c index += 1 return res # Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A\B. # Previously, this function also truncated pathnames to 8+3 format, # but as this module is called "ntpath", that's obviously wrong! def normpath(path): """Normalize path, eliminating double slashes, etc.""" sep = _get_sep(path) dotdot = _get_dot(path) * 2 special_prefixes = _get_special(path) if path.startswith(special_prefixes): # in the case of paths with these prefixes: # \\.\ -> device names # \\?\ -> literal paths # do not do any normalization, but return the path unchanged return path path = path.replace(_get_altsep(path), sep) prefix, path = splitdrive(path) # collapse initial backslashes if path.startswith(sep): prefix += sep path = path.lstrip(sep) comps = path.split(sep) i = 0 while i < len(comps): if not comps[i] or comps[i] == _get_dot(path): del comps[i] elif comps[i] == dotdot: if i > 0 and comps[i-1] != dotdot: del comps[i-1:i+1] i -= 1 elif i == 0 and prefix.endswith(_get_sep(path)): del comps[i] else: i += 1 else: i += 1 # If the path is now empty, substitute '.' if not prefix and not comps: comps.append(_get_dot(path)) return prefix + sep.join(comps) # Return an absolute path. try: from nt import _getfullpathname except ImportError: # not running on Windows - mock up something sensible def abspath(path): """Return the absolute version of a path.""" if not isabs(path): if isinstance(path, bytes): cwd = os.getcwdb() else: cwd = os.getcwd() path = join(cwd, path) return normpath(path) else: # use native Windows method on Windows def abspath(path): """Return the absolute version of a path.""" if path: # Empty path must return current working directory. try: path = _getfullpathname(path) except WindowsError: pass # Bad path - return unchanged. elif isinstance(path, bytes): path = os.getcwdb() else: path = os.getcwd() return normpath(path) # realpath is a no-op on systems without islink support realpath = abspath # Win9x family and earlier have no Unicode filename support. supports_unicode_filenames = (hasattr(sys, "getwindowsversion") and sys.getwindowsversion()[3] >= 2) def relpath(path, start=curdir): """Return a relative version of a path""" sep = _get_sep(path) if start is curdir: start = _get_dot(path) if not path: raise ValueError("no path specified") start_abs = abspath(normpath(start)) path_abs = abspath(normpath(path)) start_drive, start_rest = splitdrive(start_abs) path_drive, path_rest = splitdrive(path_abs) if normcase(start_drive) != normcase(path_drive): error = "path is on mount '{0}', start on mount '{1}'".format( path_drive, start_drive) raise ValueError(error) start_list = [x for x in start_rest.split(sep) if x] path_list = [x for x in path_rest.split(sep) if x] # Work out how much of the filepath is shared by start and path. i = 0 for e1, e2 in zip(start_list, path_list): if normcase(e1) != normcase(e2): break i += 1 if isinstance(path, bytes): pardir = b'..' else: pardir = '..' rel_list = [pardir] * (len(start_list)-i) + path_list[i:] if not rel_list: return _get_dot(path) return join(*rel_list) # determine if two files are in fact the same file try: # GetFinalPathNameByHandle is available starting with Windows 6.0. # Windows XP and non-Windows OS'es will mock _getfinalpathname. if sys.getwindowsversion()[:2] >= (6, 0): from nt import _getfinalpathname else: raise ImportError except (AttributeError, ImportError): # On Windows XP and earlier, two files are the same if their absolute # pathnames are the same. # Non-Windows operating systems fake this method with an XP # approximation. def _getfinalpathname(f): return normcase(abspath(f)) def samefile(f1, f2): "Test whether two pathnames reference the same actual file" return _getfinalpathname(f1) == _getfinalpathname(f2) try: from nt import _getfileinformation except ImportError: # On other operating systems, just return the fd and see that # it compares equal in sameopenfile. def _getfileinformation(fd): return fd def sameopenfile(f1, f2): """Test whether two file objects reference the same file""" return _getfileinformation(f1) == _getfileinformation(f2) try: # The genericpath.isdir implementation uses os.stat and checks the mode # attribute to tell whether or not the path is a directory. # This is overkill on Windows - just pass the path to GetFileAttributes # and check the attribute from there. from nt import _isdir as isdir except ImportError: # Use genericpath.isdir as imported above. pass
Close