获取在 OSX 上的应用程序中打开的文档的名称(python)

Posted

技术标签:

【中文标题】获取在 OSX 上的应用程序中打开的文档的名称(python)【英文标题】:Get name of document open in application on OSX (python) 【发布时间】:2016-04-28 10:53:06 【问题描述】:

使用 psutil 模块我检索正在运行的应用程序列表,从那里我检查这些应用程序的打开的“.plist”文件。然后我读取“.plist”文件以获取当前在应用程序中打开的文档的标题(“NSTitle”)。

有没有更好/优化的方法来完成同样的任务?

import psutil
import os
import plistlib


def check_files(application):
    plist_original_path = ""

    while True:
        for i in psutil.process_iter():
            try:
                if application in i.name():
                    for j in i.open_files():
                        if ".plist" in j.path:
                            plist_original_path = j.path

            except psutil.ZombieProcess:
                continue
            except psutil.NoSuchProcess:
                continue

        try:
            with open(plist_original_path, 'rb') as plist:
                read_plist = plistlib.load(plist)

            for i in read_plist:
                try:
                    title = i["NSTitle"]
                    print(title)
                except:
                    pass

        except FileNotFoundError:
            pass

check_files("Excel")

【问题讨论】:

【参考方案1】:

我设法找到了一种将 AppleScript 与 Python 结合使用的更好方法。

import subprocess
import time


x = ''
while 1:
    time.sleep(1)

    with open('/Link/to/folder/app_script.txt', 'rb') as appscript:
        x = appscript.read()

    p = subprocess.Popen(['osascript', '-'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = p.communicate(x)

    x = stdout.split(b',')

    print(x[0].decode().strip())
    print(x[1].decode().strip())
    print()

【讨论】:

以上是关于获取在 OSX 上的应用程序中打开的文档的名称(python)的主要内容,如果未能解决你的问题,请参考以下文章

XML 文件未通过基于文档的 OSX 应用程序打开

OSX 上的 SWT:Windows 在其他应用程序下打开

在重新加载文档之前,如何在 OS X 上的 iCloud 中检测对 Core Data 文档的更改?

批处理或 PowerShell 命令获取 Windows 中所有打开的应用程序的名称

对于任何文档类型,如何让我的应用程序显示在 iOS 上的“打开方式...”菜单中?

如何在 OS X 上的 PyQt4 中更改应用程序菜单名称