带有应用程序的MacOSX打开文件:它在哪里?

时间:2010-09-08 01:58:40

标签: macos

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

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

我主要使用python,但我正在寻找一种相当普遍的方式。

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

PY:

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

文件参考在哪里?

提前致谢,

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

这不是答案,但不适合评论。回应@Sacrilicious,并让其他人对此有所了解:

@Sacrilicious你在谈论不同的事情。 Download this sample application,它是一个包装为“App”的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脚本中传递的东西的文件名,如果有人可以让我知道他们会得到赏金:)

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

如果没有Cocoa / Carbon包装,我从来没有听说过它。

答案 4 :(得分:0)

我在https://moosystems.com/articles/8-double-click-on-files-in-finder-to-open-them-in-your-python-and-tk-application.html

描述了如何将某些文件类型链接到py2app捆绑的Python应用程序