【问题标题】:MacOSX open file with an application: where does it go to?MacOS 使用应用程序打开文件:它在哪里?
【发布时间】:2016-07-11 16:21:38
【问题描述】:

我之前发布了这个基本问题,但没有得到我可以使用的答案。

我一直在我的 Mac 上编写应用程序,并将它们物理地制作成 .app 包 (即手工制作目录和 plist 文件)。但是,当我通过右键单击 finder 中的文件并指定我的应用程序来打开应用程序中的文件时,我该如何引用该文件?

我主要使用 python,但我正在寻找一种相当通用的方法。

我的第一个猜测是作为一个论点,就像我之前帖子的答案一样,但事实并非如此。

派:

>>> print(sys.argv[1:])
'-psn_0_#######'

文件参考在哪里?

提前致谢,

【问题讨论】:

  • 有没有人弄清楚如何做到这一点?

标签: macos


【解决方案1】:

该文件由 Apple 事件传递,请参阅 this Apple document。您需要从 Python 脚本中接收它。如果它是 PyObjC 脚本,则应该有一种标准方法将 Apple 文档中的 Objective-C 解释的内容翻译成 Python。

如果您的脚本不是 GUI 应用程序,但如果您只想通过单击将文件传递给 Python 脚本,最简单的方法是使用 Automator。有一个名为“运行 Shell 脚本”的操作,您可以指定解释器和代码。您可以选择是通过stdin 还是通过参数接收文件名。 Automator 为您将脚本打包到应用程序中。

【讨论】:

  • 谢谢。我会调查的。
【解决方案2】:

这不是一个答案,但它不适合 cmets。回复@Sacilicious 并让其他人对此有所了解:

@Sacilicious 你说的是不同的东西。 Download this sample application,这是一个包装为“应用程序”的 python 脚本。查看内部并找到一个 4 行 python 脚本:myscript.app/Contents/MacOS/myscript - 它将使用

打印参数
file = open("/tmp/test.txt", "w")
file.writelines(sys.argv[1:])

将其粘贴到您的应用程序文件夹中。然后右键单击某个文件并选择“打开方式”并选择此myscript.app

现在查看/tmp/text.txt,您会看到-psn_0_####### 之类的内容,而不是您选择“打开方式”的文件的名称。这是因为文件是使用 Apple Events 而不是文件名作为参数传递的。

所以这个问题是问如何访问在 OS X .app 应用程序包装器中包装的 python 脚本中传递的东西的文件名,如果有人可以让我知道他们会得到赏金 :)

【讨论】:

    【解决方案3】:

    我们指的是文件类型/扩展名的每个用户绑定设置为指向某些应用程序的文件吗?

    ~/Library/Preferences/com.apple.LaunchServices.plist
    

    该框架是launchservices,由于在 10.6 早期的“模糊性”而受到了大量的审查,并且(与所有属性列表文件一样)可以通过为 Python 和 Ruby 制作的 ObjectiveC 的桥梁进行更改。 Here's 一个包含 Python 代码示例的链接,用于将给定的文件类型与应用程序相关联。

    【讨论】:

    • 不,你误解了这个问题。我已经发布了一个带有信息/说明的“答案”。如果您想了解更多有关此内容的信息,请查看 :)
    【解决方案4】:

    我从来没有听说过没有 Cocoa / Carbon 包装器。

    【讨论】:

      【解决方案5】:

      我在https://moosystems.com/articles/8-double-click-on-files-in-finder-to-open-them-in-your-python-and-tk-application.html描述了如何将某些文件类型链接到 py2app 捆绑的 Python 应用程序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        • 2015-06-25
        • 2016-09-15
        相关资源
        最近更新 更多