gpt4 book ai didi

macos - python : Check if a directory is an alias

转载 作者:行者123 更新时间:2023-12-02 04:39:28 25 4
gpt4 key购买 nike

python 是否有一个简单的函数来检查一个目录是否是一个实际目录,或者它是否只是另一个目录的别名?我试图列出目录中的所有文件/文件夹,但由于这些别名文件夹,我丢失了如下所示的内容:

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/bundle/首页/bundle/首页/bundle/首页/bundle

Directory Alias

我知道我可以编写一个函数来比较路径,如果我似乎在兜圈子就退出,但是有没有一个简单的函数可以准确地完成我不知道的事情?例如。 os.isAlias( ...路径名...)

谢谢!

最佳答案

这是 os.path.realpath 的一个版本,它适用于 Mac 别名以及 Python 2 下的符号链接(symbolic link):

from Carbon import File
def osx_realpath (path):
return File.FSResolveAliasFile(path, True)[0].as_pathname()

如果在递归进入每个目录之前调用 osx_realpath,则应避免重复。或者你可以定义类似的东西

def is_osx_realpath (path):
return path == osx_realpath(path)

然而,在这里您需要担心一些假阴性。如果您筛选 is_osx_realpath 并且您开始的路径是一个别名,您的程序将停止而不查看任何内容。

到目前为止,我不知道在 Python 3 下执行此操作的方法。我有一个问题 here我希望得到答案。现在我不能比使用 subprocess.call 做得更好了至 invoke something that does the check on the command line .

编辑:我应该补充一点,不仅 Carbon.File 在 Python 3 中不可用,而且它已被弃用,因此最好在 Python 2 中避免使用它——但它是我所知道的 Python 2 最实用的解决方案,网址为目前。

编辑 2:这是一种检查文件是否是我认为对 Python 3 友好的别名的方法。但是,我没有解析别名的代码。我相信您需要安装 PyObjC。

from AppKit import NSWorkspace
def is_alias (path):
uti, err = NSWorkspace.sharedWorkspace().typeOfFile_error_(
os.path.realpath(path), None)
if err:
raise Exception(unicode(err))
else:
return "com.apple.alias-file" == uti

( source )

关于macos - python : Check if a directory is an alias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com