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