Aprovechando la respuesta de CousinCocaine , y en esta respuesta a una vieja pregunta que me publiqué en el foro de BBEdit, he venido a este AppleScript, que es específico para Python:
-------------------------------------------------------------------------------------------
# Auth: Christopher Stone
# modif Fabio Grazioso
# dCre: 2015/09/22 11:00
# dMod: 2017/10/03 18:40
# Appl: BBEdit, Terminal
# Task: Attempt to run the front text document in Terminal.app.
# Libs: None
# Osax: None
# Tags: @Applescript, @Script, @BBEdit, @Run, @Front, @Document, @Terminal, @Python
-------------------------------------------------------------------------------------------
tell application "BBEdit"
tell front text document
if on disk = false then error "Front document is not saved!"
if modified = true then save
if contents of line 1 does not start with "#!" then error "No valid shebang line found!"
set docName to its name
set docFile to POSIX path of (get its file)
end tell
end tell
set shCMD to text 2 thru -1 of "
FILE=" & docFile & ";
if [[ ! -x \"$FILE\" ]]; then
chmod +x \"$FILE\";
fi
"
do shell script shCMD
set {oldTIDS, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "/"}
set docName to quoted form of docName
set docParentPath to quoted form of ((text items 1 thru -2 of docFile) as text)
set AppleScript's text item delimiters to oldTIDS
tell application "Terminal"
activate
if name of windows = {missing value} then do script
if processes of front window = {} then do script
tell front window
if its busy = true then
do script "cd " & docParentPath & " && python -i " & docName
else
do script "cd " & docParentPath & " && python -i " & docName in selected tab
end if
end tell
end tell
-------------------------------------------------------------------------------------------
Considero que esta respuesta es mejor que la propuesta por CousinCocaine solo porque puedo crear un método abreviado de teclado para el script (AFAIK no es posible asociar un método abreviado a un servicio).
Los pasos a seguir para que esto funcione son los siguientes:
- Copie el código del script en el Script Editor.app (que se encuentra en la carpeta / Aplicaciones / Utilidades /)
- Compile el script (icono de martillo en la barra del Editor)
- Guárdelo en la carpeta de scripts de BBEdit: / Users // Library / Application \ Support / BBEdit / Scripts /
-
Opcional En BBEdit, asocie el script a un atajo de teclado, en Preferencias - > Menús & Accesos directos - > Secuencias de comandos (debe hacer clic a la derecha del nombre de la secuencia de comandos, donde dice "ninguno", y presionar su acceso directo)
Finalmente, creas un script en BBEdit, por ejemplo. una secuencia de comandos de python, la guardas y, si bien es la ventana frontal en BBEdit, seleccionas el AppleScript del menú Scripts de BBEdit. Esto enviará la secuencia de comandos de Python a la Terminal y la secuencia de comandos se ejecutará.
Acerca de AppleSript, observe que la opción "-i" en la llamada a python en la línea
do script "cd " & docParentPath & " && python -i " & docName
hace que después de la ejecución del script de python, el intérprete de python no salga, según la solicitud en la pregunta.
Si las líneas
do script "cd " & docParentPath & " && python -i " & docName
do script "cd " & docParentPath & " && python -i " & docName in selected tab
son reemplazados por las líneas
do script "cd " & docParentPath & " && ./" & docName
do script "cd " & docParentPath & " && ./" & docName in selected tab
entonces este AppleScript puede lanzar cualquier script, siempre que la línea "shebang" correcta esté presente en el script, como la primera línea.
Para un script de python, la línea shebang debe ser:
#!/usr/bin/env python
mientras que para un script de shell bash la línea shebang debería ser:
#!/bin/bash