Как запустить AppleScript из скрипта Python? - PullRequest
6 голосов
/ 16 августа 2010

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

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

Ответы [ 3 ]

11 голосов
/ 16 августа 2010

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

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

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

Не забудьте также проверить стр. 2 статьи, чтобы узнать больше информации и параметров, включая appscript .

5 голосов
/ 23 декабря 2015

A subprocess версия, которая позволяет запускать оригинальный сценарий Apple как есть, без необходимости использовать кавычки и другие символы, которые могут быть сложными.Это упрощенная версия скрипта, найденная здесь , которая также выполняет параметризацию и правильное экранирование (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() закроет входной и выходной потоки.

0 голосов
/ 02 июня 2017

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

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...