如何从OS X .app包中的脚本获取打开文件的路径?

时间:2010-11-22 01:10:41

标签: python macos

所以我有Foo.app,它被配置为在启动时运行Foo.app/Contents/MacOS/foo.py。在应用程序的Info.plist文件中,我还将其设置为应用程序来处理“.bar”文件的启动。当我双击.bar文件时,Foo.app会按预期打开。

问题是当以这种方式打开文件时,我无法弄清楚如何在foo.py脚本中获取打开文件的路径。我以为它会在sys.argv[1],但事实并非如此。相反,sys.argv[1]包含一个奇怪的字符串,如“-psn_0_2895682”。

有谁知道如何获得打开文件的绝对路径?我也检查了os.environ,但它也不存在。

1 个答案:

答案 0 :(得分:2)

您可以获取应用的进程ID,然后使用lsof向操作系统查询所有打开的文件,查找进程ID:

from string import *
from os import getpid
from subprocess import check_output, STDOUT

pid = getpid()

lsof = (check_output(['/usr/sbin/lsof', '-p', str(pid)], stderr=STDOUT)).split("\n")
for line in lsof[1:]:
    print line

如果您要编入索引,常规文件将在第五列'REG'中的类型为[4]

在运行代码中打开的文件可以以类似的方式显示:     来自字符串导入*     来自os import getpid     来自子进程import check_output,STDOUT     导入重新

pid = getpid()

f = open('./trashme.txt', 'w')
f.write('This is a test\n')

lsof = (check_output(['/usr/sbin/lsof', '-p', str(pid)], stderr=STDOUT)).split("\n")
print lsof[0]
for line in lsof[1:]:
    if (re.search('trashme', line)): print line 

f.close

结果是:

COMMAND  PID USER   FD   TYPE     DEVICE  SIZE/OFF    NODE NAME
python  6995 greg    3w   REG       14,2         0 2273252 /Users/greg/Desktop/trashme.txt