【发布时间】:2022-02-13 08:45:35
【问题描述】:
我正在尝试编写一个能够提取给定应用程序菜单结构的脚本。这是一个简化的工作示例:
tell application "System Events"
tell process "Terminal"
tell menu bar 1
set listA to name of every menu bar item
set listB to name of every menu of every menu bar item
set listC to name of every menu item of every menu of every menu bar item
set listD to name of every menu of every menu item of every menu of every menu bar item
set listE to name of every menu item of every menu of every menu item of every menu of every menu bar item
end tell
end tell
end tell
return {listA, listB, listC, listD, listE}
当我在脚本编辑器上运行这个脚本时,结果是一组嵌套列表,像这样(实际结果太长,所以我给出一个示例):
{{{"Option1", "Option2", "Option3"}, {{"subOption1.1", "subOption1.2"}, {"subOption2.1", subOption2.2", "subOption2.3"}, {"subOption3.1"}}}
因此,很容易知道菜单 Option1 里面有两个项目,依此类推...
但是当我从 python 运行相同的脚本时,使用“osascript -e”,列表结构和大括号都消失了,就像这样
{{"Option1", "Option2", "Option3"}, {"subOption1.1", "subOption1.2", "subOption2.1", subOption2.2", "subOption2.3", "subOption3.1"}}
所以没有办法知道哪个子列表相互对应。
有没有办法保留这些大括号或将它们转换为您以后可以管理的不同的东西,或者将其写入一种保持嵌套结构的“原始”数据?
提前致谢!
【问题讨论】:
-
osascript有一个s标志,可以以可重新编译的形式输出文本(参见手册页) - 您如何在 Python 脚本中使用结果? -
PyPI is your friend.
-
感谢您的回复!!! @red_menace,“-s”选项正是我需要的。我打算构建一个菜单结构(Python dict),您可以在其中拥有所有相关信息、项目层次结构、标题、矩形等。因此您甚至可以模拟对给定选项的点击。
-
感谢您的回复!!! @foo,在开始编写我的模块(PyGetWindowMP)时,我尝试了很长时间的 py-applescript。我出于一个我现在不记得的原因丢弃了它(对不起)。也许只是为了避免依赖外部依赖。无论如何我都会尝试一下(新的)。
标签: macos applescript osascript