Как встроить AppleScript в сценарий Python?

Я пытаюсь встроить AppleScript в сценарий Python. Я не хочу, чтобы сохранить AppleScript в качестве файла, а затем загрузить его в моем сценарии Python. Есть ли способ ввода AppleScript в виде строки в Python и Python выполнить AppleScript? Огромное спасибо.

Вот мой скрипт: import subprocess import re import os

  • передавать и получать значения между скриптом python и applescript
  • Вызов AppleScript из Python без использования osascript или appscript?
  • def get_window_title(): cmd = """osascript<<END tell application "System Events" set frontApp to name of first application process whose frontmost is true end tell tell application frontApp if the (count of windows) is not 0 then set window_name to name of front window end if end tell return window_name END""" p = subprocess.Popen(cmd, shell=True) p.terminate() return p def get_class_name(input_str): re_expression = re.compile(r"(\w+)\.java") full_match = re_expression.search(input_str) class_name = full_match.group(1) return class_name print get_window_title() 

  • Есть ли разница между установкой «brew install» и «pip install»?
  • Сбой сборки Numpy не может импортировать multiarray
  • Установленный virtualenv и virtualenvwrapper: Python говорит, что ни один модуль с именем virtualenvwrapper
  • Как правильно остановить выполнение phantomjs
  • Проблемы с настройкой модуля MySQLdb
  • Юникод Python в терминале Mac os X
  • 6 Solutions collect form web for “Как встроить AppleScript в сценарий Python?”

    Использовать подпроцесс :

     from subprocess import Popen, PIPE scpt = ''' on run {x, y} return x + y end run''' args = ['2', '2'] p = Popen(['osascript', '-'] + args, stdin=PIPE, stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate(scpt) print (p.returncode, stdout, stderr) 

    Пример 3 в этой статье предполагает:

     #!/usr/bin/env python #sleepy-mac.py #makes my mac very sleepy import os cmd = """osascript -e 'tell app "Finder" to sleep'""" def stupidtrick(): os.system(cmd) stupidtrick() 

    В наши дни, однако, subsystem.Popen обычно предпочитается над os.system (статья из трех лет назад, когда никто не закричал, увидев вызов os.system ;-).

    Вместо того, чтобы внедрять AppleScript, я бы вместо этого использовал appscript . Я никогда не использовал версию Python, но это было очень хорошо в Ruby. И убедитесь, что, если вы устанавливаете его на Snow Leopard, у вас есть последняя версия XCode. Тем не менее, я до сих пор не смог установить его на Snow Leopard. Но у меня был только Snow Leopard в течение ~ 1 дня, поэтому ваш пробег может отличаться.

    Вот общая функция в python. Просто передайте свой код applescript с помощью / без args и верните значение в виде строки. Благодаря этому ответу.

     from subprocess import Popen, PIPE def run_this_scpt(scpt, args=[]): p = Popen(['osascript', '-'] + args, stdin=PIPE, stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate(scpt) return stdout #Example of how to run it. run_this_scpt("""tell application "System Events" to keystroke "m" using {command down}""") #Example of how to run with args. run_this_scpt(''' on run {x, y} return x + y end run''', ['2', '2']) 

    Вы можете использовать os.system :

     import os os.system(''' osascript -e '[{YOUR SCRIPT}]' '[{GOES HERE}]' ''') 

    или, как предложил Алекс Мартелли, вы можете использовать переменную:

     import os script = ''' [{YOUR SCRIPT}] [{GOES HERE}] ''' os.system('osascript -e ' + script) 

    В python 3 это будет несколько иначе:

     script = 'tell "some application" to do something' p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout, stderr = p.communicate(script) 

    Теперь Popen ожидает байтовый объект, чтобы передать строку, необходим параметр universal_newlines=True .

    Python - лучший язык программирования в мире.