Pytanie:
Unikaj zamykania procesu terminala po uruchomieniu skryptu przez BBEdit
Fabio
2017-08-18 07:15:03 UTC
view on stackexchange narkive permalink

Używam BBEdit do pisania i testowania skryptów Pythona i zwykle uruchamiam je w procesie terminalowym za pomocą polecenia „Uruchom w terminalu”. Czy istnieje sposób, aby proces terminala otwierany przez BBEdit pozostawał „aktywny” po zakończeniu skryptu? Nie chciałbym mieć

  [Proces zakończony]
 

i zamiast tego nadal mieć aktywny znak zachęty, albo powłokę, albo środowisko Pythona, ze wszystkimi zmiennymi, które utworzyłem w skrypcie, nadal istnieją. Byłoby to podobne do sytuacji, gdy uruchamiam skrypt z istniejącego procesu terminalowego, albo z powłoki:

  $ python nazwa_skryptu.py
 

lub z interpretera Pythona:

  >>> nazwa_skryptu.py
 

W szczególności w ostatnim przypadku, gdy skrypt kończy pracę, proces nadal jest aktywny w oknie terminala.

Po prostu dodaj & na końcu polecenia, aby je uruchomić.
Jestem świadomy używania &. Ale uruchamiam skrypt, gdy jestem w BBEdit. BBEdit posiada polecenie menu (patrz #! ("Sebang") menu), które "wysyła" bieżący skrypt do terminala i wykonuje go. Aby ta odpowiedź była przydatna, musiałbym wiedzieć, jak zmodyfikować zachowanie tego polecenia menu BBEdit i dodać domyślny znak „&” na końcu polecenia
Czy skontaktowałeś się z pomocą techniczną BareBones na support@barebones.com?Mogą mieć dla ciebie metody, aby to osiągnąć.
Pięć odpowiedzi:
CousinCocaine
2017-10-01 11:44:30 UTC
view on stackexchange narkive permalink

Jak rozumiem, masz skrypt Pythona w BBEdicie.

Python script

Wybierasz przetestowanie kodu za pomocą opcji „Uruchom w terminalu” w polu „#!”menu.

Run in Terminal

Teraz otwiera się okno terminala, uruchamia skrypt i kończy pracę.

exit code

Teraz tutaj jest winowajca.BBEdit nie tylko uruchamia twój skrypt, ale także dodaje exit .W BBEdit nie ma opcji usunięcia tego polecenia exit .Ale BBEdit jest wysoce skryptowalny i istnieje kilka obejść.Możesz stworzyć skrypt BBEdit (z menu Scripts), który działa, ale osobiście uważam, że stworzenie usługi jest najłatwiejsze (uruchom AppleScript, który otwiera skrypt w terminalu, tak jak zrobiłbyś to ręcznie).

W ramach tej oferty udostępniliśmy skrypt, który faktycznie robi to, co chcesz.

Cześć CousinCocaine, niż ty!To wydaje się właściwe dla mnie! Pozwól, że spróbuję, a dam ci nagrodę. Skoro nie znam skryptów / usług Apple, czy byłoby możliwe skojarzenie usługi ze skrótem klawiaturowym?A gdyby nie było to możliwe, czy byłoby skomplikowane przekształcenie tego w skrypt?(W takim razie chyba pamiętam, że łatwo jest skojarzyć skrót ze skryptem)
Cześć CousinCocaine, bawiłem się twoim kodem, częściowo postępując zgodnie z instrukcjami tutaj: https://arstechnica.com/gadgets/2011/03/howto-build-mac-os-x-services-with-automator-and-shell-scripting/ Ale nie widzę go w menu usług, chociaż jest zapisany w ~ / Library / Services. Zapisałem go również jako skrypt (plik tekstowy z rozszerzeniem .sh w ~ / Library / Application \ Support / BBEdit / Scripts /), ale wyświetla mi się następujący błąd: 83:84: błąd składni: oczekiwano „”, ale odnaleziono „” ”. (-2741) Plik / Users / fabio / Library / Application Support / BBEdit / Scripts / python nie istnieje. Pomysły?
Fabio
2017-10-04 18:00:52 UTC
view on stackexchange narkive permalink

Opierając się na odpowiedzi CousinCocaine i tej odpowiedzi na stare pytanie, które zamieściłem na forum BBEdit, dotarłem do tego AppleScript, który jest specyficzny dla Pythona:

  -------------------------------------------- -----------------------------------------------
# Auth: Christopher Stone
# modif Fabio Grazioso
# dCre: 2015/09/22 11:00
# dMod: 2017/10/03 18:40
# Appl: BBEdit, Terminal
# Zadanie: próba uruchomienia przedniego dokumentu tekstowego w Terminal.app.
# Libs: brak
# Osax: Brak
# Tagi: @Applescript, @Script, @BBEdit, @Run, @Front, @Document, @Terminal, @Python
-------------------------------------------------- -----------------------------------------

powiedz aplikacji „BBEdit”
    tell front text document
        jeśli on disk = false to błąd „Przedni dokument nie został zapisany!”
        jeśli zmodyfikowano = prawda, a następnie zapisz
        jeśli zawartość wiersza 1 nie zaczyna się od „#!” następnie błąd „Nie znaleziono poprawnej linii shebang!”
        ustaw docName na jego nazwę
        ustaw docFile na ścieżkę POSIX (pobierz jej plik)
    koniec powiedz
koniec powiedz

ustaw shCMD na tekst od 2 do -1 z "
FILE = "& docFile &";
gdyby [[ ! -x \ "$ PLIK \"]]; następnie
  chmod + x \ "$ FILE \";
fi
"
wykonaj skrypt powłoki shCMD

ustaw {oldTIDS, ograniczniki elementów tekstowych AppleScript} na {ograniczniki elementów tekstowych AppleScript, „/”}
ustaw docName na cytowaną formę docName
ustaw docParentPath na cytowaną formę ((elementy tekstowe od 1 do -2 w docFile) jako tekst)
ustaw ograniczniki elementów tekstowych AppleScript na oldTIDS

powiedz aplikacji „Terminal”
    Aktywuj
    jeśli nazwa windows = {brakująca wartość}, wykonaj skrypt
    jeśli procesy okna frontowego = {}, wykonaj skrypt


    powiedz przedniej szybie
        jeśli jest zajęty = true
            wykonaj skrypt "cd" & docParentPath & "&& python -i" & docName
        jeszcze
            wykonaj skrypt "cd" & docParentPath & "&& python -i" & docName na wybranej karcie
        koniec, jeśli
    koniec powiedz
koniec powiedz
-------------------------------------------------- -----------------------------------------
 

Uważam, że ta odpowiedź jest lepsza niż ta zaproponowana przez CousinCocaine tylko dlatego, że mogę utworzyć skrót klawiaturowy do skryptu (AFAIK nie jest możliwe skojarzenie skrótu z usługą).

Kroki, które należy wykonać, aby to zadziałało, są następujące:

  1. Skopiuj kod skryptu do Script Editor.app (znajdującego się w folderze / Applications / Utilities /)
  2. Skompiluj skrypt (ikona młotka na pasku edytora)
  3. Zapisz go w folderze skryptów BBEdit: / Users // Library / Application \ Support / BBEdit / Scripts /
  4. Opcjonalnie W BBEdit skojarz skrypt ze skrótem klawiaturowym, w Preferencjach -> Menu & Skróty -> Skrypty (musisz kliknąć na prawo od nazwy skryptu, gdzie jest napisane "brak ”i naciśnij swój skrót)

Here is a screenshot of the preferences' pane

  1. Na koniec tworzysz skrypt w BBEdit, np. skrypt Pythona, zapisujesz go i chociaż jest to okno frontowe w BBEdit, wybierasz AppleScript z menu skryptów BBEdita. Spowoduje to wysłanie skryptu Pythona do terminala i zostanie on wykonany.

Jeśli chodzi o AppleSript, zwróć uwagę, że opcja „-i” w wywołaniu Pythona w linii

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

sprawia, że ​​po wykonaniu skryptu Python interpreter Pythona nie jest zamykany, zgodnie z żądaniem w pytaniu.

Jeśli linie

  do script "cd" & docParentPath & "&& python -i" & docName
wykonaj skrypt "cd" & docParentPath & "&& python -i" & docName na wybranej karcie
 

zastępuje się liniami

  do script "cd" & docParentPath & "&& ./" & docName
do script "cd" & docParentPath & "&& ./" & docName w wybranej zakładce
 

następnie ten AppleScript może uruchomić dowolny skrypt, pod warunkiem, że w skrypcie znajduje się właściwa linia „shebang”, jako pierwsza linia. W przypadku skryptu w Pythonie linia shebang powinna wyglądać następująco:

  #! / usr / bin / env python
 

podczas gdy dla skryptu powłoki bash linia shebang powinna wyglądać następująco:

  #! / bin / bash
 
Widzę, że to zrobiłeś.Miły.BBEdit świetny program.Miłego kodowania.
bated
2017-09-29 07:55:31 UTC
view on stackexchange narkive permalink
  $ python nazwa_skryptu.py &
 

Spowoduje to uruchomienie procesu w tle.

Alternatywnie możesz spróbować odpowiedzi tutaj, których nie przypisuję sobie

Jestem świadomy używania &. Ale uruchamiam skrypt, gdy jestem w BBEdit. BBEdit posiada polecenie menu (patrz #! ("Sebang") menu), które "wysyła" bieżący skrypt do terminala i wykonuje go. Aby ta odpowiedź była przydatna, musiałbym wiedzieć, jak zmodyfikować zachowanie tego polecenia menu BBEdit i dodać domyślny znak „&” na końcu polecenia
Czy mógłbyś zamiast tego wywołać skrypt powłoki, który uruchamia twój Python i tworzy go w tle?
Z poziomu BBEdit?Może tak, ale jak to robisz?
OP ma konkretne pytanie dotyczące uruchamiania skryptu z poziomu BBEdit.Nie jest to konkretne polecenie Bash.Myślę, że poprawna odpowiedź na inne pytanie.
Sherwood Botsford
2017-10-03 03:38:48 UTC
view on stackexchange narkive permalink

Nie do końca tego chcesz, ale jest to rozsądne obejście:

FSWatch.Krótko mówiąc, monitoruje katalog lub plik pod kątem zmian i uruchamia skrypt za każdym razem, gdy zauważy zmianę.

Więc zamiast uruchamiać się w terminalu, masz otwarte okno terminala, w którym fswatch obserwuje plik (i) pod kątem zmian.Kiedy go widzi, uruchamia skrypt - w tym przypadku plik, który jest obserwowany.

Ma to tę zaletę, że za każdym razem uruchamia się w tym samym oknie, więc nie pojawiają się za każdym razem nowe okna terminala.

Wskazówki tutaj:

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

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

W preferencjach terminala w obszarze Profile wybierz profil, którego używasz domyślnie, i przejdź do karty Shell.W sekcji „Kiedy powłoka kończy pracę” wybierz „Zamknij, jeśli powłoka wyszła prawidłowo”.

To powinno spowodować zamknięcie okna / karty, gdy uruchomiony skrypt zakończy działanie.

Dziękuję za informację.Jednak to jest zupełnie inne niż to, czego potrzebuję.Potrzebuję terminalu otwartego i aktywnego :)


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...