ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

操作系统路径.islink在使用python的windows上

2020-09-14 06:00:35  阅读:203  来源: 互联网

标签:return python windows FILE REPARSE path os 链接 islink


在安装了Python2.7的Windows7上,如何检测路径是否是符号链接? 这不起作用os.path.islink(),如果false或不支持,则返回false,并且我提供的路径肯定是一个符号链接,所以我假设windows不支持它?我能做什么?在

 

已被浏览了6978次 更新日期: 2020-09-14 05:38:47 3 个回答 fefe Tyson

对于目录:

import os, ctypes
def IsSymlink(path):
    FILE_ATTRIBUTE_REPARSE_POINT = 0x0400
    return os.path.isdir(path) and (ctypes.windll.kernel32.GetFileAttributesW(unicode(path)) & FILE_ATTRIBUTE_REPARSE_POINT):

Source

赞 踩 评论 - 2020年7月28日 11:01
fefe Tyson

使用Python的旧版本也是个问题。如果你想坚持2.x,你将无法利用2010年初之后新增的新功能。在

其中一个特性是处理NTFS符号链接。这个功能是在2010年底3.2中添加的。(有关详细信息,请参见3.23.12.7源文件。)

直到2009年之前,Python才开始处理链接。(IIRC,支持包含在6.0内核中,但是userland支持需要Vista/2008上的一个服务包;只有7/2008R2和更高版本才内置了它。另外,您需要一个足够新的MSVCRT来访问userland支持,而且Python有一个明确的策略,即不在小版本中升级到新的visualstudio版本。)

代码没有被移植回2.x的原因是that there will never be a 2.8,而像2.7.3(或2.7.4)这样的bug修复版本没有获得新的特性,只有bug修复。在

这被报告为issue 13143,预期的修复是更改2.7文档,以澄清在Windows上,islink总是返回{}。在

因此,如果你想在Windows下读取NTFS符号链接,要么升级到python3.2+,要么你必须自己使用^{}^{}等来完成。在

或者,正如Martijn Pieters建议的那样,不要自己动手,而是使用一个像^{}这样的第三方库来完成和/或借用their code。在

或者,如果你真的愿意,可以借用3.2源代码并围绕它构建一个C扩展模块。如果你从ntpathos再到{}(实际上是posixmodule.c),我相信它的核心在^{} and ^{}。在

赞 踩 评论 - 2020年7月28日 11:01 fefe Tyson

这是我最后用来确定文件或目录是否是Windows 7中的链接:

def isLink(path):
    if os.path.exists(path):
        if os.path.isdir(path):
            FILE_ATTRIBUTE_REPARSE_POINT = 0x0400
            attributes = ctypes.windll.kernel32.GetFileAttributesW(unicode(path))
            return (attributes & FILE_ATTRIBUTE_REPARSE_POINT) > 0
        else:
            command = ['dir', path]
            try:
                with open(os.devnull, 'w') as NULL_FILE:
                    o0 = check_output(command, stderr=NULL_FILE, shell=True)
            except CalledProcessError as e:
                print e.output
                return False
            o1 = [s.strip() for s in o0.split('\n')]
            if len(o1) < 6:
                return False
            else:
                return 'SYMLINK' in o1[5]
    else:
        return False

编辑:根据Zitrax和Annan的建议修改代码

赞 踩 评论 - 2020年7月28日 11:01

标签:return,python,windows,FILE,REPARSE,path,os,链接,islink
来源: https://www.cnblogs.com/zhoug2020/p/13664679.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有