【发布时间】:2018-05-04 12:08:07
【问题描述】:
我正在从 python 调用一个苹果脚本对话框:
import subprocess
applescript = """
display dialog "Some message goes here..." ¬
with title "This is a pop-up window" ¬
with icon caution ¬
buttons {"OK"}
"""
subprocess.call("osascript -e '{}'".format(applescript), shell=True)
但是,根据我的应用程序的某些条件,通知可能会达到 100 多个,即,太多的对话框可能会排队并通过单击它们各自的“确定”按钮手动关闭每个对话框是不可行的。所以我正在寻找的是另一个苹果脚本,我可以直接从可以为我清除这些对话框的苹果脚本编辑器中使用它。一个好处是将他们的文本和时间戳捕获到一个文本文件中,但我需要清除它们。
我是 Mac/applescipts 的新手,还没有找到有效的解决方案。我尝试了以下方法:
tell application "System Events"
tell process "NotificationCenter"
set numwins to (count windows)
repeat with i from numwins to 1 by -1
click button "OK" of window i
end repeat
end tell
end tell
和
tell application "System Events"
click button 1 of windows of application process "TextEdit"
end tell
有人可以指导我如何实现这一目标吗?谢谢!
或者,
如果有办法为每次迭代“分离”通知:
b = """
display notification "All graphics have been converted 2." with title "My Graphic Processing Script" subtitle "Processing is complete." sound name "Frog"
"""
subprocess.call("osascript -e '{}'".format(a), shell=True)
那么,这也可以。目前正在发生的事情是通知的每次迭代都在彼此堆叠 - 即,当生成多个通知时,我只看到最新的通知或此类通知的数量。相反,我希望看到所有通知 - 也许让它们垂直堆叠 - 例如:第一个通知显示在右上角,当第二个通知出现在第一个通知消失之前,第一个通知可以被向下推,第二个通知可以是显示在上面。同样,第三个可以将第一个和第二个向下推,然后在它们上面等等。
这可以实现吗?
基本上,我需要查看所有此类通知的内容——无论是被动地还是主动地要求点击。但在这两种情况下,驳回通知不应妨碍我的工作。这是一个监控应用程序,因此基于某些条件,它会以我的方式抛出通知——越接近实时越好——这就是为什么我需要查看所有通知的原因,而不是写入某些 csv 或txt 文件,我会定期检查该文件 - 这将是一个不可持续的工作流程。
【问题讨论】:
-
您必须在对话框中选择选项还是直接确定?如果没有选项为什么不使用 osx 通知中心?
-
AppleScript
display dialog创建了一个 modal 窗口,因此会停止脚本中的任何进一步处理,直到被解除,那么它们是如何排队的呢?此外,您的 OP 中似乎存在一些矛盾,一方面您说“额外的好处是将他们的文本和时间戳捕获到一个文本文件中”,然后说“而不是写入一些 csv 或 txt 文件,我亲自检查该文件定期”。那么它是什么,你真正想要什么? -
无论如何,您正在调用
osascript来显示对话框,并因此根据您使用单个按钮“确定”显示的代码以编程方式单击“确定”按钮,您将使用:tell application "System Events" to click button 1 of window 1 of process "osascript"
标签: python macos applescript