如何在Python脚本中运行AppleScript?

8 投票
4 回答
7973 浏览
提问于 2025-04-16 02:50

如何在Python脚本中运行AppleScript?

这个问题说得很清楚了……
(显然是在Mac上)

4 个回答

0

我得到了输出结果... 下面就是:

import subprocess
import sys

for i in range(int(sys.argv[1])):
    ip = str(sys.argv[2])
    username = str(sys.argv[3])
    pwd = str(sys.argv[4])

    script = '''tell application "Terminal"
        activate
        do script with command "cd Desktop && python test_switch.py {ip} {username} {pwd}"
        delay 15
    end tell
    '''

    proc = subprocess.Popen(['osascript', '-'],
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE)
    stdout_output = proc.communicate(script.format(ip=ip, username=username, pwd=pwd))[0]
6

这是一个使用 subprocess 的版本,可以直接运行原始的 AppleScript,而不需要去处理那些复杂的引号和其他字符。这个版本简化了在这里找到的脚本,那个脚本还涉及参数化和正确的字符转义(适用于 Python 2.x)。

import subprocess

script = '''tell application "System Events"
    activate
    display dialog "Hello Cocoa!" with title "Sample Cocoa Dialog" default button 2
end tell
'''

proc = subprocess.Popen(['osascript', '-'],
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE)
stdout_output = proc.communicate(script)[0]
print stdout_output

注意:如果你需要用同一个 Popen 实例执行多个脚本,那么你需要用 proc.stdin.write(script) 明确写入,并用 proc.stdout.read() 读取,因为 communicate() 会关闭输入和输出流。

12

这篇不错的文章提供了一个简单的解决方案。

cmd = """osascript -e 'tell app "Finder" to sleep'"""
def stupidtrick():
    os.system(cmd)

不过现在你应该使用subprocess模块,而不是os.system

别忘了去看看这篇文章的第二页,那里有更多的信息和选项,包括appscript

撰写回答