Ich verwende BBEdit, um Python-Skripte zu schreiben und zu testen, und führe die Skripte normalerweise in einem Terminalprozess mit dem Befehl „In Terminal ausführen“ aus. Gibt es eine Möglichkeit, den von BBEdit geöffneten Terminalprozess "aktiv" zu lassen, nachdem das Skript abgeschlossen ist? Das möchte ich nicht haben
[Process completed]
Nachricht und stattdessen immer noch eine aktive Eingabeaufforderung haben, entweder die Shell oder die Python-Umgebung, wobei alle Variablen, die ich im Skript erstellt habe, noch vorhanden sind. Dies wäre ähnlich der Situation, wenn ich das Skript von einem vorhandenen Terminalprozess aus starte, entweder von der Shell:
$ python script_name.py
oder vom Python-Interpreter:
>>> script_name.py
Insbesondere im letzten Fall, wenn das Skript beendet wird, habe ich den Prozess immer noch im Terminalfenster aktiv.
Soweit ich weiß, haben Sie ein Python-Skript in BBEdit.
Sie entscheiden sich, den Code mit der Option „Im Terminal ausführen“ von „#!“ zu testen. Speisekarte.
Jetzt öffnet sich ein Terminalfenster, führt das Skript aus und beendet sich.
Jetzt ist hier der Übeltäter. BBEdit führt nicht nur Ihr Skript aus, sondern fügt auch eine exit
. Es gibt keine Option in BBEdit, um diesen exit
Befehl zu entfernen. Aber BBEdit ist in hohem Maße skriptfähig und es gibt einige Problemumgehungen. Sie können ein BBEdit-Skript erstellen (aus dem Skriptmenü), das ausgeführt wird, aber ich persönlich denke, dass das Erstellen von Diensten am einfachsten ist (führen Sie ein AppleScript aus, das Ihr Skript im Terminal öffnet, wie Sie es manuell getan hätten).
In diesem Leckerbissen haben Sie ein Skript bereitgestellt , das tatsächlich das tut, was Sie wollen.
Aufbauend auf der Antwort von CousinCocaine und auf dieser Antwort auf eine alte Frage, die ich selbst im BBEdit-Forum gepostet habe, bin ich zu diesem AppleScript gekommen, das spezifisch für Python ist:
-------------------------------------------------------------------------------------------
# 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
-------------------------------------------------------------------------------------------
Ich finde diese Antwort besser als die von CousinCocaine vorgeschlagene, nur weil ich eine Tastenkombination für das Skript erstellen kann (AFAIK, es ist nicht möglich, eine Verknüpfung mit einem Dienst zu verknüpfen).
Die zu befolgenden Schritte, damit dies funktioniert, sind wie folgt:
Beachten Sie bei AppleSript, dass die Option "-i" im Python-Aufruf in der Zeile steht
do script "cd " & docParentPath & " && python -i " & docName
sorgt dafür, dass nach der Ausführung des Python-Skripts der Python-Interpreter gemäß der Anfrage in der Frage nicht beendet wird.
Wenn die Linien
do script "cd " & docParentPath & " && python -i " & docName
do script "cd " & docParentPath & " && python -i " & docName in selected tab
werden durch die Linien ersetzt
do script "cd " & docParentPath & " && ./" & docName
do script "cd " & docParentPath & " && ./" & docName in selected tab
dann kann dieses AppleScript jedes Skript starten, vorausgesetzt, die richtige "shebang"-Zeile ist im Skript als allererste Zeile vorhanden. Für ein Python-Skript sollte die Shebang-Zeile lauten:
#!/usr/bin/env python
während für ein Bash-Shell-Skript die Shebang-Zeile lauten sollte:
#!/bin/bash
$ python script_name.py &
Dadurch wird der Prozess im Hintergrund ausgeführt.
Alternativ könnten Sie die Antworten hier versuchen, für die ich nicht die Anerkennung nehme
Dies ist nicht ganz das, was Sie wollen, aber es ist eine vernünftige Problemumgehung:
FSWatch. Kurz gesagt, es überwacht ein Verzeichnis oder eine Datei auf Änderungen und führt ein Skript aus, wenn es eine Änderung sieht.
Anstatt also im Terminal zu laufen, haben Sie ein Terminalfenster geöffnet, in dem fswatch die Datei(en) auf Änderungen überwacht. Wenn es eines sieht, führt es das Skript aus – in diesem Fall die überwachte Datei.
Dies hat den Vorteil, dass es jedes Mal im selben Fenster ausgeführt wird, sodass Sie nicht ständig neue Terminalfenster öffnen.
Anfahrt hier:
https://stackoverflow.com/questions/24573584/how-to-watch-file-changes-on-mac-osx-using-fswatch
Wählen Sie in den Terminal-Einstellungen unter Profile das Profil aus, das Sie standardmäßig verwenden, und wechseln Sie zur Registerkarte Shell. Wählen Sie unter "Beim Beenden der Shell" die Option "Schließen, wenn die Shell sauber beendet wurde".
Dadurch sollte das Fenster / die Registerkarte geschlossen werden, wenn das von Ihnen ausgeführte Skript sauber beendet wird.
gebeizt
Fabio
Schotte