所以我有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
,但它也不存在。
答案 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