-1

我有一些软件,我真的不需要它们与文件类型相关联,所以我把它们放在标准位置以外的目录中,如“/Applications”或“~/Applications”,但不知何故系统仍然是能够将它们挖掘出来并将它们添加到上下文菜单中的“打开方式”列表中。我的问题是如何强制系统忽略它们,从而保持我的开放列表紧凑。

4

1 回答 1

1

这是解决方法。有效。

import plistlib
import os
import sys
import shutil

SUBDIR_PATH=os.path.sep.join(('Contents', 'Info.plist'))

class FileTypeCleaner(object):

    def __init__(self,pathOfFile):
        self.filepath = self.checkInfoPlistExistence(pathOfFile)
        if self.filepath is not None:
            try:
                self.plistdata = plistlib.readPlist(self.filepath)
            except:
                self.plistdata = None
        else:
            self.plistdata = None

    @staticmethod
    def checkInfoPlistExistence(pathOfFile):
        path=os.path.sep.join((pathOfFile, SUBDIR_PATH))
        if os.path.isfile(path):
            return path
        return None

    def checkInfoPlistHasTypeKey(self):
        if 'CFBundleDocumentTypes' not in self.plistdata or \
                self.plistdata['CFBundleDocumentTypes'] == []:
            return False
        return True

    def vacuumTypeKey(self):
        self.plistdata['CFBundleDocumentTypes'] = []


if __name__=='__main__':
    if len(sys.argv)==1:
        sys.stderr.write('Usage: cleanFTypeAssoc.py app1.app [app2.app ...]\n')
        sys.stderr.flush()
        raise SystemExit
    for f in sys.argv[1:]:
        p = FileTypeCleaner(f)
        if p.plistdata is not None:
            if p.checkInfoPlistHasTypeKey():
                p.vacuumTypeKey()
                shutil.move(p.filepath, p.filepath+'~')
                plistlib.writePlist(p.plistdata, p.filepath)
于 2013-09-20T06:50:04.433 回答