我之前发过这个基本问题,但没有得到我可以使用的答案。
我一直在我的Mac上编写应用程序,并且已经将它们物理地制作成.app捆绑包 (即手工制作目录和plist文件)。但是当我通过在finder中右键单击文件并指定我的应用程序来打开应用程序中的文件时,我该如何引用该文件?
我主要使用python,但我正在寻找一种相当普遍的方式。
我的第一个猜测是作为一个论点,就像我以前的帖子的答案一样,但事实并非如此。
PY:
>>> print(sys.argv[1:])
'-psn_0_#######'
文件参考在哪里?
提前致谢,
答案 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)