当前位置: 首页 > 面试题库 >

什么可以代替OSX上Python中现已弃用的Carbon.File.FSResolveAliasFile?

戴树
2023-03-14
问题内容

在Python 2中,我可以使用以下代码来解析MacOS别名或符号链接:

from Carbon import File
File.FSResolveAliasFile(alias_fp, True)[0].as_pathname()

其中alias_fp是我很好奇的文件的路径,存储为字符串(source)。

但是,文档欣喜地告诉我,不赞成使用整个Carbon系列模块。我应该改用什么?

编辑:我相信下面的代码是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

(来源)

不幸的是,我无法使用@Milliways的解决方案(对可可一无所知),而我在互联网上其他地方发现的东西看起来要复杂得多(也许它正在处理各种边缘情况?)。


问题答案:

PyObjC桥使您可以访问NSURL的书签处理,这是别名的现代(向后兼容)替代:

import os.path
from Foundation import *

def target_of_alias(path):
    url = NSURL.fileURLWithPath_(path)
    bookmarkData, error = NSURL.bookmarkDataWithContentsOfURL_error_(url, None)
    if bookmarkData is None:
        return None
    opts = NSURLBookmarkResolutionWithoutUI | NSURLBookmarkResolutionWithoutMounting
    resolved, stale, error = NSURL.URLByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_(bookmarkData, opts, None, None, None)
    return resolved.path()

def resolve_links_and_aliases(path):
    while True:
        alias_target = target_of_alias(path)
        if alias_target:
            path = alias_target
            continue
        if os.path.islink(path):
            path = os.path.realpath(path)
            continue
        return path


 类似资料:
  • 问题内容: 我用setup_environ()了一段时间写了一个一次性python脚本,该脚本从命令行运行,但作为自定义manage.py命令(我的首选)根本不合适。一切设置得很好。我认为我们不赞成使用此功能,因为非django的pythonista嘲笑djangonauts来处理诸如此类的魔术性东西,我们已经厌倦了感到肮脏。因此,如果不赞成使用,还有什么选择?也许这是一个懒惰的问题,但是要达到相

  • 问题内容: Spring 3.2中不推荐使用JdbcTemplate中的queryforInt / queryforLong方法。我找不到使用这些方法替换现有代码的最佳实践的理由或理由。 典型方法: 确定以上方法需要重新编写如下: 显然,这种弃用使JdbcTemplate类更简单(或者呢?)。QueryForInt一直是一种便捷的方法(我想),并且已经存在了很长时间。为什么将其删除。结果,代码变得

  • 我们有多个应用程序消费者收听同一个Kafka主题,生产者在向主题发送消息时设置消息头,以便特定实例可以评估消息头并处理消息。eg公司 在Spring Cloud Stream 3.0.0中,不推荐使用@StreamListener,我在函数中找不到与condition属性等效的属性。 有什么建议吗?

  • 问题内容: 我正在启动一个具有第三方XSD的新项目。我的Java应用程序需要生成符合此XSD的XML消息,并读取符合此XSD的传入XML消息。过去,我为此使用了Apache XMLBeans(http://xmlbeans.apache.org/)。看来XMLBeans已经退休了。现已淘汰的XMLBeans有什么好的替代品?我在其他项目上使用过XStream,但是我不记得XStream能够从XSD

  • 我正在将java应用程序从SpringBoot1.5迁移到SpringBoot2.2.3,这涉及到将Hibernate/Envers升级到5.4.10。最终的 现有代码调用AuditReader#getCurrentRevision(类revisionEntityClass,boolean persist),该类已被弃用,JavaDocs状态为使用RevisionListener,但这与我们需要获

  • 有人知道是什么取代了Amazon DynamoDBClient吗?在留档里什么都找不到 包-com。亚马逊。服务。发电机BV2