Uso BBEdit para escribir y probar secuencias de comandos de Python, y generalmente ejecuto las secuencias de comandos en un proceso de terminal, con el comando "Ejecutar en terminal". ¿Hay alguna manera de que el proceso de terminal abierto por BBEdit permanezca "activo" después de que se complete el script? quisiera no tener la
[Process completed]
mensaje y, en su lugar, seguir teniendo un indicador activo, ya sea el shell o el entorno de Python, con todas las variables que he creado en el script aún existentes. Esto sería similar a la situación cuando ejecuto el script desde un proceso de terminal existente, ya sea desde el shell:
$ python script_name.py
o desde el intérprete de python:
>>> script_name.py
En particular, en el último caso, cuando sale el script, todavía tengo el proceso activo en la ventana de la terminal.
Según tengo entendido, tienes un script de Python en BBEdit.
Usted elige probar el código usando la opción "Ejecutar en Terminal" del '#!' menú.
Ahora se abre una ventana de Terminal, ejecuta el script y sale.
Ahora aquí está el culpable. BBEdit no solo ejecuta su script, sino que también agrega un archivo exit
. No hay ninguna opción en BBEdit para eliminar este exit
comando. Pero BBEdit es altamente programable y hay algunas soluciones. Puede crear un Script BBEdit (desde el menú Scripts) que se ejecuta, pero personalmente creo que crear un Servicio es el más fácil (ejecute AppleScript que abre su script en la Terminal como lo habría hecho manualmente).
En este tratamiento, ha proporcionado un script que realmente hace lo que quiere.
Basándome en la respuesta de CousinCocaine , y en esta respuesta a una vieja pregunta que publiqué yo mismo en el foro de BBEdit, llegué 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
-------------------------------------------------------------------------------------------
Encuentro esta respuesta mejor que la propuesta por CousinCocaine solo porque puedo crear un atajo de teclado para el script (AFAIK, no es posible asociar un atajo a un servicio).
Los pasos a seguir para que esto funcione son los siguientes:
Acerca de AppleSript, observe que la opción "-i" en la llamada de python en la línea
do script "cd " & docParentPath & " && python -i " & docName
hace que después de la ejecución del script de python, no se salga del intérprete de python, según la solicitud en la pregunta.
si las lineas
do script "cd " & docParentPath & " && python -i " & docName
do script "cd " & docParentPath & " && python -i " & docName in selected tab
son reemplazadas por las líneas
do script "cd " & docParentPath & " && ./" & docName
do script "cd " & docParentPath & " && ./" & docName in selected tab
entonces este AppleScript puede iniciar cualquier secuencia de comandos, siempre que la línea "shebang" correcta esté presente en la secuencia de comandos, como la primera línea. Para un script de python, la línea shebang debería ser:
#!/usr/bin/env python
mientras que para un script bash shell, la línea shebang debería ser:
#!/bin/bash
$ python script_name.py &
Esto ejecutará el proceso en segundo plano.
Alternativamente, puede probar las respuestas aquí por las cuales no tomo el crédito.
Esto no es exactamente lo que desea, pero es una solución razonable:
FSWatch. Brevemente, monitorea un directorio o archivo en busca de cambios y ejecuta un script cada vez que ve un cambio.
Entonces, en lugar de ejecutar en la terminal, tiene una ventana de terminal abierta con fswatch observando los archivos en busca de cambios. Cuando ve uno, ejecuta el script; en este caso, el archivo que se está viendo.
Esto tiene la ventaja de que se ejecuta en la misma ventana cada vez, por lo que no está abriendo nuevas ventanas de terminal todo el tiempo.
Direcciones aquí:
https://stackoverflow.com/questions/24573584/how-to-watch-file-changes-on-mac-osx-using-fswatch
En las preferencias de Terminal, en Perfiles, seleccione el perfil que usa de forma predeterminada y vaya a la pestaña Shell. En "Cuando el shell salga", seleccione "Cerrar si el shell salió limpiamente".
Eso debería hacer que la ventana/pestaña se cierre cuando el script que ejecuta se cierra limpiamente.
vencido
fabio
escocés