【问题标题】:How to open an application in Mac OS using Python如何使用 Python 在 Mac OS 中打开应用程序
【发布时间】:2015-05-04 21:32:22
【问题描述】:

我想使用 Python 在 Mac OS 中打开 TextEdit 或 Firefox 等应用程序,然后等待应用程序退出。我无法确定打开应用程序并等待的确切命令。

【问题讨论】:

  • 我改进了你的格式。请编辑您尝试执行的操作。

标签: python macos applescript


【解决方案1】:

我不知道如何在 applescript 中执行此操作,但您可以使用 /usr/bin/open UNIX 级 OS X 命令执行此操作。这个 sn-p 会打开 TextEdit.app 并阻塞,等待它退出再继续:

import subprocess

subprocess.call(
    ["/usr/bin/open", "-W", "-n", "-a", "/Applications/TextEdit.app"]
    )

查看打开的手册页 (man open) 和 python subprocess module 文档了解更多详细信息。

【讨论】:

  • 是的,使用这段代码,即使我关闭了textedit,代码并没有退出,它仍然处于阻塞状态
  • 您是否关闭了 TextEdit,或者您是否退出 TextEdit?根据文档,-W 开关告诉 open 等待程序退出。它在我的测试用例中有效;当我退出 TextEdit 时,子进程停止阻塞。
  • 是的,我关闭了应用程序,但它仍然处于阻塞状态
  • 您不会在 Mac 中“关闭”和应用程序。你“关闭”一个文件。您退出应用程序 - 当我这样做时 - 上述 subprocess.call() 命令按预期返回。这个建议很好用。但是,在下一个级别 - 如果我不等待应用程序退出,我如何获取 TextEdit 的“子进程”对象,而不是“打开”进程???
  • 在 Mac 语义上,您不能“关闭”应用程序。您只能“关闭”应用程序的窗口。即使没有打开的窗口,应用程序也会继续运行。正确的语义是“退出”应用程序,这是一个独特的操作,可从菜单栏中的应用程序菜单(以应用程序本身命名的菜单)获得,其键缩写是 Command-Q
【解决方案2】:

你可以像这个例子一样打开任何应用程序

import os

os.system("open /Applications/Google\ Chrome.app")
os.system("open /Applications/Todoist.app")
os.system("open /Applications/WhatsApp.app")

【讨论】:

  • 这不适用于本机应用程序,例如Dictionary.appFaceTime.app
  • 这很好用:os.system("open /System/Applications/FaceTime.app")
【解决方案3】:

AppleScript:

tell app "Whatever you want" to open

从 Python 调用

import os
os.system("""osascript -e 'tell app "Safari" to open'""")

【讨论】:

  • 这是我在 Mac OS 11.1 (Python 3.9.6) 上看到的错误:21:25:执行错误:Safari 出现错误:AppleEvent 处理程序失败。 (-10000) 256
【解决方案4】:

这适用于 Mac OS 11.1:

import os

os.system("open -a TextEdit")
print("Done and not blocking")

【讨论】:

  • Arthur Correa 已经有了import osos.system(..) 的答案,所以我看不出这是如何增加任何价值作为新答案的。此外,这实际上并没有回答 OP 中的问题!。
  • @user3439894 我正在寻找类似问题的答案:“如何从 Python 打开 Mac OS 应用程序,但不阻塞”。我的回答不需要应用程序的完整路径,也不会阻塞。
  • RE:“但没有阻塞””——但这不是 OP 想要的!RE:“我的答案不需要应用程序的完整路径”——不足以证明单独的答案,只需评论现有答案即可。
  • 这不是原始发帖人想要的 100%,但你永远不知道。也许他改变了主意,想要一种非阻塞的方式来打开应用程序。
【解决方案5】:

您可以在 python 中使用此关闭 osx 上的任何应用程序(如 Chrome 或 Safari):

import os

os.system("pkill Chrome")

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 2019-06-22
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多