6 votos

Evita que el proceso de la terminal se cierre, después de que BBEdit ejecute un script.

Uso BBEdit para escribir y probar scripts de Python, y suelo ejecutar los scripts en un proceso de terminal, con el comando "Run in Terminal". ¿Hay alguna manera de que el proceso de terminal abierto por BBEdit permanezca "activo", después de que el scriptsscriptscriptsse haya completado? Me gustaría no tener el

[Process completed] 

y en su lugar tener un prompt 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 lanzo 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 concreto, en el último caso, cuando el script sale, sigo teniendo el proceso activo en la ventana del terminal.

5voto

CousinCocaine Puntos 3615

Según tengo entendido, tienes un script de Python en BBEdit.

Python script

¡Elige probar el código utilizando la opción "Ejecutar en el Terminal" del menú '#!

Run in Terminal

Ahora se abre una ventana de Terminal, ejecuta el script y sale.

exit code

Aquí está el culpable. BBEdit no sólo ejecuta su script, sino que también añade un exit . No hay ninguna opción en BBEdit para eliminar esto exit comando. Pero BBEdit es altamente scriptable y hay algunas soluciones. Puedes crear un script de BBEdit (desde el menú ) que se ejecute, pero personalmente creo que crear el Servicio es lo más fácil (ejecutar algún AppleScript que abra tu script en el Terminal como lo hubieras hecho manualmente).

En este trato ha proporcionado una script que realmente hace lo que quieres.

3voto

Fabio Puntos 31

Basándose en la respuesta de PrimoCocaína y en esta respuesta a una vieja pregunta que publiqué yo mismo en el foro de BBEdit, he llegado 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

-------------------------------------------------------------------------------------------

Esta respuesta me parece mejor que la propuesta por CousinCocaine sólo porque puedo crear un atajo de teclado al script (AFAIK no es posible asociar un atajo a un servicio).

Los pasos a seguir para que esto funcione son los siguientes:

  1. Copiar el código script en la script Editor.app (que se encuentra en la carpeta /Applications/Utilities/).
  2. Compilar el script (icono del martillo en la barra del Editor)
  3. Guárdelo en la carpeta BBEdit scripts: /Users//Library/Application\ Support/BBEdit/scripts/
  4. Opcional: En BBEdit asocia el script a un atajo de teclado, en las Preferencias -> Menús y Atajos -> (tienes que pulsar a la derecha del nombre del script, donde pone "ninguno", y pulsar tu atajo)

Here is a screenshot of the preferences' pane

  1. Finalmente, creas un script en BBEdit, por ejemplo un script de Python, lo guardas, y mientras es la ventana frontal en BBEdit, seleccionas el AppleScript del menú de BBEdit. Esto enviará el script de Python a la Terminal y se ejecutará el script.

Sobre el 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 tras la ejecución del script de Python, no se salga del intérprete de Python, tal y como se pide en la pregunta.

Si las líneas

do script "cd " & docParentPath & " && python -i " & docName
do script "cd " & docParentPath & " && python -i " & docName in selected tab

se sustituyen 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 shell bash script la línea shebang debe ser:

#!/bin/bash

2voto

bated Puntos 113
$ python script_name.py &

Esto ejecutará el proceso en segundo plano.

También puede probar las respuestas aquí por lo que no me atribuyo el mérito

2voto

Mose Puntos 687

Esto no es exactamente lo que quieres, 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.

Así que en lugar de ejecutar en la terminal, usted tiene una ventana de terminal abierta con fswatch viendo el archivo (s) para los cambios. Cuando ve uno, ejecuta el script -- en este caso el archivo que se está observando.

Esto tiene la ventaja de que se ejecuta en la misma ventana cada vez, por lo que no está apareciendo nuevas ventanas de terminal todo el tiempo.

Cómo llegar hasta aquí:

https://stackoverflow.com/questions/24573584/how-to-watch-file-changes-on-mac-osx-using-fswatch

0voto

Scott Earle Puntos 2004

En las preferencias del Terminal, en Perfiles, seleccione el perfil que utiliza por defecto y vaya a la pestaña Shell. En "Cuando el shell sale" seleccione "Cerrar si el shell salió limpiamente".

Eso debería hacer que la ventana/pestaña se cierre cuando el script que ejecutes salga limpiamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X