7
votes

Comment faire fonctionner un AppleScript dans un script Python?

Comment exécuter un AppleScript depuis un script Python?

Les questions disent tout .. (Sur un Mac évidemment)


0 commentaires

4 Réponses :


11
votes

Ce bel article suggère la solution simple xxx

si aujourd'hui, vous utiliseriez le module sous-processus au lieu de OS.System , bien sûr.

Assurez-vous également de vérifier Page 2 de l'article pour beaucoup plus d'informations et des options, y compris Appscript .


8 commentaires

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 et sous-processus.Call , comme Suggéré dans l'article Page 1 (Eh bien, l'article que je mentionne utilise l'ancien OS.System , mais c'est un détail ;-) pourrait suffire.


Oh, Alex, je n'étais certainement pas en désaccord avec vous !


@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é.



5
votes

1 commentaires

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



0
votes

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]


0 commentaires

0
votes

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


0 commentaires