Comment exécuter un AppleScript à partir d'un script Python?Comment exécuter un AppleScript à partir d'un script Python?
Les questions dit tout .. (Sur un Mac évidemment)
Comment exécuter un AppleScript à partir d'un script Python?Comment exécuter un AppleScript à partir d'un script Python?
Les questions dit tout .. (Sur un Mac évidemment)
this nice article suggère la solution simple
cmd = """osascript -e 'tell app "Finder" to sleep'"""
def stupidtrick():
os.system(cmd)
si aujourd'hui vous utiliseriez le module subprocess
au lieu de os.system
, bien sûr.
Assurez-vous de vérifier également page 2 de l'article pour beaucoup plus d'informations et d'options, y compris appscript.
Une version subprocess
qui permet d'exécuter un script Apple original tel quel, sans avoir à échapper les guillemets et autres caractères qui peuvent être difficiles. C'est une version simplifiée du script trouvé here qui effectue également la paramétrisation et l'échappement correct (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
REMARQUE: Si vous devez exécuter plus d'un script avec la même instance Popen alors vous aurez besoin d'écrire explicitement
proc.stdin.write(script)
et lu avecproc.stdout.read()
carcommunicate()
fermera les flux d'entrée et de sortie.
En python 3 cela ne fonctionnerait pas, un paramètre supplémentaire universal_newlines = True sur le popen est nécessaire. Voir https://stackoverflow.com/a/45133926/1534775 – gbonetti
j'ai eu les gens de sortie ... Ici, il est ce qui suit:
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]
Si vous allez faire toute sorte d'Apple scripts d'événements non-trivial de Python, vous devriez utiliser appscript. C'est bien conçu, mature et bien soutenu. –
@Ned, bien sûr, mais pour un but aussi simple et spécifique que l'appel d'un simple morceau d'applescript, le "truc stupide" de 'osascript -e' et 'subprocess.call', comme suggéré dans la page 1 de l'article (bien le 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 *! –