Domanda:
Evita la chiusura del processo terminale, dopo che BBEdit ha eseguito uno script
Fabio
2017-08-18 07:15:03 UTC
view on stackexchange narkive permalink

Uso BBEdit per scrivere e testare gli script Python e di solito eseguo gli script in un processo terminale, con il comando "Run in Terminal". C'è un modo per fare in modo che il processo del terminale aperto da BBEdit rimanga "attivo", dopo che lo script è stato completato? Vorrei non avere il

  [Processo completato]
 

e invece di avere ancora un prompt attivo, sia la shell che l'ambiente Python, con tutte le variabili che ho creato nello script ancora esistenti. Sarebbe simile alla situazione in cui avvio lo script da un processo terminale esistente, o dalla shell:

  $ python nome_script.py
 

o dall'interprete Python:

  >>> nome_script.py
 

In particolare, nell'ultimo caso, quando lo script esce, ho ancora il processo attivo nella finestra del terminale.

Aggiungi semplicemente una & alla fine del comando per eseguirlo.
Sono a conoscenza dell'uso di &. Ma sto eseguendo lo script mentre sono in BBEdit. BBEdit ha un comando di menu (vedi menu #! ("Sebang")) che "invia" lo script corrente al terminale e lo esegue. Affinché questa risposta sia utile, avrei bisogno di sapere come modificare il comportamento di questo comando di menu BBEdit e aggiungere un "&" predefinito alla fine del comando
Hai contattato l'assistenza BareBones su [email protected]?Potrebbero avere un metodo per farlo.
Cinque risposte:
#1
+5
CousinCocaine
2017-10-01 11:44:30 UTC
view on stackexchange narkive permalink

Da quanto ho capito, hai uno script Python in BBEdit.

Python script

Scegli di testare il codice utilizzando l'opzione "Run in Terminal" da "#!"menu.

Run in Terminal

Ora si apre una finestra di Terminale, esegue lo script ed esce.

exit code

Ora ecco il colpevole.BBEdit non solo esegue lo script, ma aggiunge anche un exit .Non esiste alcuna opzione in BBEdit per rimuovere questo comando exit .Ma BBEdit è altamente programmabile e ci sono alcune soluzioni alternative.Puoi creare uno script BBEdit (dal menu Scripts) che viene eseguito, ma personalmente penso che creare Service sia il più semplice (esegui un po 'di AppleScript che apre il tuo script nel Terminale come avresti fatto manualmente).

In questo trattamento hai fornito uno script che effettivamente fa quello che vuoi.

Ciao CousinCocaine, di te!Questa sembra la cosa giusta per me! Fammi provare e ti garantirò la taglia. Dato che non ho familiarità con gli script / servizi Apple, sarebbe possibile associare il servizio a una scorciatoia da tastiera?E nel caso non fosse possibile, sarebbe complicato trasformarlo in un copione?(In tal caso immagino di ricordare che è facile associare un collegamento a uno script)
Ciao CousinCocaine, ho giocato con il tuo codice, seguendo in parte le istruzioni che trovi qui: https://arstechnica.com/gadgets/2011/03/howto-build-mac-os-x-services-with-automator-and-shell-scripting/ Ma non riesco a vederlo nel menu dei servizi, sebbene sia salvato in ~ / Library / Services. L'ho anche salvato come uno script (file di testo, con estensione .sh, in ~ / Library / Application \ Support / BBEdit / Scripts /) ma mi dà il seguente errore: 83:84: errore di sintassi: previsto "," ma trovato "" ". (-2741) Il file / Users / fabio / Library / Application Support / BBEdit / Scripts / python non esiste. Idee?
#2
+3
Fabio
2017-10-04 18:00:52 UTC
view on stackexchange narkive permalink

Basandosi sulla risposta di CousinCocaine e su questa risposta a una vecchia domanda che mi sono posto sul forum BBEdit, sono arrivato a questo AppleScript, che è per Python:

  -------------------------------------------- -----------------------------------------------
# Autenticazione: Christopher Stone
# modif Fabio Grazioso
# dCre: 2015/09/22 11:00
# dMod: 03/10/2017 18:40
# Appl: BBEdit, Terminal
# Attività: tentare di eseguire il documento di testo anteriore in Terminal.app.
# Libs: Nessuno
# Osax: Nessuno
# Tag: @Applescript, @Script, @BBEdit, @Run, @Front, @Document, @Terminal, @Python
-------------------------------------------------- -----------------------------------------

dire all'applicazione "BBEdit"
    dire il documento di testo anteriore
        se su disco = false allora l'errore "Il documento anteriore non è stato salvato!"
        se modificato = vero, salva
        se il contenuto della riga 1 non inizia con "#!" quindi errore "Nessuna linea di shebang valida trovata!"
        imposta docName al suo nome
        imposta docFile sul percorso POSIX di (ottieni il suo file)
    fine raccontare
fine raccontare

imposta shCMD al testo da 2 a -1 di "
FILE = "& docFile &";
Se [[ ! -x \ "$ FILE \"]]; poi
  chmod + x \ "$ FILE \";
fi
"
eseguire lo script di shell shCMD

imposta {oldTIDS, delimitatori di elementi di testo di AppleScript} su {delimitatori di elementi di testo di AppleScript, "/"}
imposta docName sulla forma tra virgolette di docName
imposta docParentPath alla forma tra virgolette di ((elementi di testo da 1 a -2 di docFile) come testo)
imposta i delimitatori degli elementi di testo di AppleScript su oldTIDS

dire all'applicazione "Terminale"
    attivare
    se nome di Windows = {valore mancante} allora esegui lo script
    se i processi di front window = {} allora esegui lo script


    dire alla finestra anteriore
        se è occupato = vero allora
            esegui script "cd" & docParentPath & "&& python -i" & docName
        altro
            esegui script "cd" & docParentPath & "&& python -i" & docName nella scheda selezionata
        finisci se
    fine raccontare
fine raccontare
-------------------------------------------------- -----------------------------------------
 

Trovo questa risposta migliore di quella proposta da CousinCocaine solo perché posso creare una scorciatoia da tastiera per lo script (AFAIK non è possibile associare una scorciatoia a un servizio).

I passaggi da seguire affinché funzioni sono i seguenti:

  1. Copia il codice dello script in Script Editor.app (che si trova nella cartella / Applicazioni / Utility /)
  2. Compila lo script (icona a forma di martello sulla barra dell'Editor)
  3. Salvalo nella cartella degli script di BBEdit: / Users // Library / Application \ Support / BBEdit / Scripts /
  4. Opzionale In BBEdit associa lo script a una scorciatoia da tastiera, nelle Preferenze -> Menu & Scorciatoie -> Script (devi fare clic a destra del nome dello script, dove dice "nessuno "e premi la scorciatoia)

Here is a screenshot of the preferences' pane

  1. Infine, crei uno script in BBEdit, ad es. uno script Python, lo salvi e mentre è la finestra principale in BBEdit, selezioni AppleScript dal menu Scripts di BBEdit. Questo invierà lo script python al terminale e lo script verrà eseguito.

Riguardo a AppleSript, nota che l'opzione "-i" in python chiama nella riga

  do script "cd" & docParentPath & "&& python -i" & docName
 

fa in modo che dopo l'esecuzione dello script python, l'interprete python non venga chiuso, come da richiesta nella domanda.

Se le righe

  do script "cd" & docParentPath & "&& python -i" & docName
esegui script "cd" & docParentPath & "&& python -i" & docName nella scheda selezionata
 

sono sostituite dalle linee

  esegui script "cd" & docParentPath & "&& ./" & docName
esegui script "cd" & docParentPath & "&& ./" & docName nella scheda selezionata
 

quindi questo AppleScript può avviare qualsiasi script, a condizione che la riga "shebang" corretta sia presente nello script, come la prima riga. Per uno script Python, la riga shebang dovrebbe essere:

  #! / usr / bin / env python
 

mentre per uno script di shell bash la riga shebang dovrebbe essere:

  #! / bin / bash
 
Vedo che l'hai fatto.Bello.BBEdit un bel pezzo di software.Buona codifica.
#3
+2
bated
2017-09-29 07:55:31 UTC
view on stackexchange narkive permalink
  $ python nome_script.py &
 

Questo eseguirà il processo in background.

In alternativa potresti provare le risposte qui per le quali non mi prendo il merito

Sono a conoscenza dell'uso di &. Ma sto eseguendo lo script mentre sono in BBEdit. BBEdit ha un comando di menu (vedi menu #! ("Sebang")) che "invia" lo script corrente al terminale e lo esegue. Affinché questa risposta sia utile, avrei bisogno di sapere come modificare il comportamento di questo comando di menu BBEdit e aggiungere un "&" predefinito alla fine del comando
Potresti invece chiamare uno script di shell che esegue il tuo python e lo sfondo?
Dall'interno di BBEdit?Forse sì, ma come lo fai?
L'OP ha una domanda specifica sull'esecuzione di script dall'interno di BBEdit.Non un comando Bash specifico.Penso che una risposta corretta a un'altra domanda.
#4
+2
Sherwood Botsford
2017-10-03 03:38:48 UTC
view on stackexchange narkive permalink

Non è esattamente quello che vuoi, ma è una soluzione ragionevole:

FSWatch.In breve monitora una directory o un file per le modifiche ed esegue uno script ogni volta che vede una modifica.

Quindi, invece di eseguire nel terminale, hai una finestra del terminale aperta con fswatch che controlla i file per le modifiche.Quando ne vede uno, esegue lo script, in questo caso il file che si sta guardando.

Questo ha il vantaggio di essere eseguito ogni volta nella stessa finestra, quindi non si aprono sempre nuove finestre di terminale.

Indicazioni qui:

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

#5
  0
Scott Earle
2017-09-29 08:36:06 UTC
view on stackexchange narkive permalink

Nelle preferenze del terminale in Profili, seleziona il profilo che utilizzi per impostazione predefinita e vai alla scheda Shell.Sotto "Quando la shell esce" seleziona "Chiudi se la shell è uscita in modo pulito".

Questo dovrebbe chiudere la finestra / scheda quando lo script che esegui esce correttamente.

Grazie per l'informazione.Tuttavia, questo è completamente diverso da quello di cui ho bisogno.Ho bisogno del terminale aperto e attivo :)


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...