Come eseguire un AppleScript da uno script Python?Come eseguire un AppleScript da uno script Python?
Le domande dice tutto .. (su un Mac, ovviamente)
Come eseguire un AppleScript da uno script Python?Come eseguire un AppleScript da uno script Python?
Le domande dice tutto .. (su un Mac, ovviamente)
this nice article suggerisce la soluzione più semplice
cmd = """osascript -e 'tell app "Finder" to sleep'"""
def stupidtrick():
os.system(cmd)
se oggi devi usare il modulo subprocess
invece di os.system
, naturalmente.
Assicuratevi di controllare anche page 2 dell'articolo per molte più informazioni e opzioni, tra cui appscript.
Una versione subprocess
che consente di eseguire uno script Apple originale così com'è, senza dover evitare citazioni e altri caratteri che possono essere complicati. Si tratta di una versione semplificata dello script trovato here che esegue anche la parametrizzazione e l'escaping corretto (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
NOTA: Se è necessario eseguire più di uno script con la stessa istanza Popen allora avrete bisogno di scrivere in modo esplicito con
proc.stdin.write(script)
e leggere conproc.stdout.read()
perchécommunicate()
chiuderà i flussi di input e output.
In Python 3 ciò non funzionerebbe, è necessario un parametro aggiuntivo universal_newlines = True sul popen. Vedi https://stackoverflow.com/a/45133926/1534775 – gbonetti
ho avuto la gente uscita ... Qui è seguente:
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]
Se hai intenzione di fare qualsiasi tipo di scripting di Apple Event non banale da Python, si dovrebbe utilizzare appscript. È ben progettato, maturo e ben supportato. –
@Ned, certo, ma per uno scopo così semplice e specifico come chiamare un semplice bit di applescript, lo "stupido trucco" di 'osascript -e' e' subprocess.call', come suggerito nella pagina 1 dell'articolo (bene il l'articolo come menzionato usa il vecchio 'os.system', ma quello è un dettaglio ;-) potrebbe bastare. –
Oh, Alex, certamente non ero in disaccordo con * tu *! –