Comment exécuter un AppleScript depuis un script Python? P>
Les questions disent tout .. (Sur un Mac évidemment) p>
4 Réponses :
Ce bel article suggère la solution simple si aujourd'hui, vous utiliseriez le module Assurez-vous également de vérifier Page 2 de l'article pour beaucoup plus d'informations et des options, y compris Appscript . P> P> sous-processus code> au lieu de OS.System code>, bien sûr. p>
Si vous allez faire une sorte de script d'événement pomme non trivial de Python, vous devriez utiliser AppScript. Il est bien conçu, mature et bien soutenu.
@Ned, bien sûr, mais pour un objectif aussi simple et spécifique que l'appelant un bit simple d'AppleScript, le "truc stupide" de Osascript -e code> et sous-processus.Call code>, comme Suggéré dans l'article Page 1 (Eh bien, l'article que je mentionne utilise l'ancien OS.System code>, mais c'est un détail ;-) pourrait suffire.
Oh, Alex, je n'étais certainement pas en désaccord avec vous i>!
@Ned, je n'étais pas d'accord avec vous (c'est pourquoi je dis "sûr" ;-), donc nous semblons être dans un accord furieux ;-).
Appscript n'est plus pris en charge malheureusement
Que voulez-vous dire "ce n'est plus supporté"?
@Speedyrazor - à partir de la page AppScript sur Sourceforge "Veuillez noter que Appscript n'est plus développé ni pris en charge, et son utilisation n'est pas recommandée pour les nouveaux projets." Appscript.sourceforge.net
Le lien "Nice Article" à O'Reilly est maintenant cassé.
A Subprocess code> Version qui permet d'exécuter un script Apple original tel que, sans avoir à échapper à des citations et à d'autres caractères pouvant être délicats. C'est une version simplifiée du script trouvé ici qui fait également partie de la paramétrisation et de l'échappement appropriée (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
Dans Python 3, cela ne fonctionnerait pas, un paramètre supplémentaire universal_newlines = true sur le popen est nécessaire. Voir Stackoverflow.com/a/45133926/1534775
J'ai eu les gens de sortie ... Voici la suivante:
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]
J'étais assez frustré par le manque de détails dans la propre documentation de Apple sur la façon de faire cela et de passer également des arguments. Je devais envoyer l'arg (dans ce cas un identifiant de zoom) comme une chaîne sinon l'argument ne s'est pas passé à l'application AppleScript
Voici mon code à partir de Python: P>
on run argv
set zoom_id to 0
zoom_id = item 1 in argv
tell application "zoom.us"
--do stuff
end tell
end run