Как запустить AppleScript из скрипта Python?

Как запустить AppleScript из скрипта Python?

вопросы говорят все.. (На Mac, очевидно)

3 ответов


это хорошая статья предлагает простое решение

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

хотя сегодня вы бы использовать subprocess модуль вместо os.system, конечно.

обязательно проверьте Страница 2 статьи для получения дополнительной информации и опций, в том числе appscript.


A subprocess версия, которая позволяет запускать оригинальный сценарий apple как есть, без необходимости избегать кавычек и других символов, которые могут быть сложными. Это упрощенная версия найденного скрипта здесь который также выполняет параметризацию и правильное экранирование (Python 2.икс.)

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() закроет входные и выходные потоки.


Я получил выходных людей... Вот оно:

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]