¿Cómo ejecutar un AppleScript desde dentro de un script de Python?¿Cómo ejecutar un AppleScript desde un script de Python?
Las preguntas lo dice todo .. (En un Mac, obviamente)
¿Cómo ejecutar un AppleScript desde dentro de un script de Python?¿Cómo ejecutar un AppleScript desde un script de Python?
Las preguntas lo dice todo .. (En un Mac, obviamente)
this nice article sugiere la solución simple
cmd = """osascript -e 'tell app "Finder" to sleep'"""
def stupidtrick():
os.system(cmd)
pesar de que hoy tendrá que utilizar el módulo subprocess
en lugar de os.system
, por supuesto.
Asegúrese también de marcar page 2 del artículo para obtener más información y opciones, incluyendo appscript.
A subprocess
versión que permite ejecutar un script original de Apple tal cual, sin tener que escapar de comillas y otros caracteres que pueden ser complicados. Es una versión simplificada del script encontrado here que también hace la parametrización y el escape adecuado (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: Si es necesario ejecutar más de una secuencia de comandos con la misma instancia Popen entonces tendrá que escribir de forma explícita con
proc.stdin.write(script)
y leer conproc.stdout.read()
porquecommunicate()
cerrará las corrientes de entrada y salida.
En python 3 esto no funcionaría, se necesita un parámetro adicional universal_newlines = True en el popen. Ver https://stackoverflow.com/a/45133926/1534775 – gbonetti
que tiene la gente de salida ... Aquí está lo siguiente:
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 va a hacer ningún tipo de secuencias de comandos no trivial de Apple Evento de Python, usted debe utilizar appscript. Está bien diseñado, es maduro y está bien respaldado. –
@Ned, claro, pero para un propósito tan simple y específico como llamar a un simple trozo de applescript, el "truco estúpido" de 'osascript -e' y' subprocess.call', como se sugiere en la página 1 del artículo (bueno, El artículo que menciono usa el antiguo 'os.system', pero eso es un detalle ;-) podría ser suficiente. –
¡Oh, Alex, ciertamente no estaba en desacuerdo con * usted *! –