Jak zatrzymać / zakończyć uruchamianie skryptu Pythona?


106

Napisałem program w IDLE do tokenizacji plików tekstowych i zaczyna tokeniza 349 plików tekstowych! Jak mogę to zatrzymać? Jak mogę zatrzymać działający program w języku Python?


5
ctrl+cpowinien go zabić. Alternatywnie, kill -9to
xbonez

1
Wiele odpowiedzi jest tutaj specyficznych dla platformy. Wyszukaj swoją platformę (Windows, Linux, Mac, coś innego?)
tripleee

Odpowiedzi:


60

Aby zatrzymać program, po prostu naciśnij Control + C.


26
Ta metoda działała na moim laptopie z systemem Windows, ale na moim pulpicie linuxa pokazała się ^Cw terminalu, a monitor systemu pokazał, że Python nadal zużywa dużo procesora ...
user3768495

Czy można wznowić skrypt po jego zatrzymaniu?
Gathide,

10
@Gathide Jeśli chcesz wstrzymać proces i umieścić go w tle, naciśnij Ctrl + Z(przynajmniej na Linuksie). Następnie, jeśli chcesz go zabić, biegnij, kill %ngdzie „n” jest liczbą, którą otrzymałeś obok „Zatrzymano” po naciśnięciu Ctrl + Z. Jeśli chcesz go wznowić, biegnij fg.
cluxter

1
Nie działa, jeśli masz w programie klauzulę general except: Z wyjątkiem: łapie przerwanie, coś robi (lub nie), a następnie program wesoło kontynuuje.
DragonLord

@DragonLord Twój generał z wyjątkiem powinien mieć specjalną oprócz błędu wyświetlanego przez Ctrl + C. W każdym razie generalne wyjątki są zwykle odradzane.
Pere

129

Możesz to również zrobić, jeśli używasz exit()funkcji w swoim kodzie. Bardziej idealnie, możesz to zrobić sys.exit(). sys.exit()co może zakończyć działanie Pythona, nawet jeśli uruchamiasz rzeczy równolegle w multiprocessingpakiecie.

Uwaga: aby użyć programu sys.exit(), musisz go zaimportować:import sys


8
Uwaga: mogłem znaleźć przykłady, które sys.exit(1)nie zatrzymują procesu. Zasadniczo mam wiele wątków, a każdy z nich blokuje zewnętrzne procesy uruchomione przez Popen. Potrzebuję opcji jądrowej, aby zabić wszystkie procesy podrzędne utworzone przez proces Pythona, a także sam proces Pythona. Nie znalazłem do tej pory.
Dici

sys.exit () nie zabija procesu, ale zgłasza wyjątek SystemExit, który nie zatrzymuje wykonywania przez zamknięcie programu
c24b

39

Jeśli twój program działa na konsoli interaktywnej, naciśnięcie CTRL+ Cspowoduje zgłoszenie KeyboardInterruptwyjątku w głównym wątku.

Jeśli program w Pythonie go nie złapie, KeyboardInterruptspowoduje to zamknięcie Pythona. Jednak except KeyboardInterrupt:blok lub coś w rodzaju gołego except:zapobiegnie faktycznemu zatrzymaniu skryptu przez ten mechanizm.

Czasami, jeśli KeyboardInterruptnie działa, możesz SIGBREAKzamiast tego wysłać sygnał; w systemie Windows CTRL+ Pause/Breakmoże być obsługiwane przez interpreter bez generowania przechwytywalnego KeyboardInterruptwyjątku.

Jednak te mechanizmy działają głównie tylko wtedy, gdy interpreter języka Python działa i reaguje na zdarzenia systemu operacyjnego. Jeśli interpreter języka Python z jakiegoś powodu nie odpowiada, najskuteczniejszym sposobem jest zakończenie całego procesu systemu operacyjnego, na którym działa interpreter. Mechanizm tego zależy od systemu operacyjnego.

W środowisku powłoki w stylu uniksowym możesz nacisnąć CTRL+, Zaby zawiesić dowolny proces aktualnie kontrolujący konsolę. Po odzyskaniu zachęty powłoki możesz użyć jobsdo wyświetlenia zawieszonych zadań i możesz zabić pierwsze zawieszone zadanie kill %1. (Jeśli chcesz go ponownie uruchomić, możesz kontynuować zadanie na pierwszym planie, używając fg %1; więcej informacji można znaleźć w instrukcji obsługi powłoki).

Alternatywnie, w środowisku uniksowym lub uniksopodobnym można znaleźć PID procesu Pythona (identyfikator procesu) i zabić go za pomocą PID. Użyj czegoś podobnego ps aux | grep pythondo sprawdzenia, które procesy Pythona są uruchomione, a następnie użyj kill <pid>do wysłania SIGTERMsygnału.

killKomenda wysyła na Unix SIGTERMdomyślnie, a program można zainstalować Python obsługi sygnału za SIGTERMpomocą signalmodułu. Teoretycznie każdy program obsługujący sygnał SIGTERMpowinien z wdziękiem zakończyć proces. Ale czasami, jeśli proces utknie (na przykład jest zablokowany w nieprzerywalnym stanie uśpienia IO), SIGTERMsygnał nie ma wpływu, ponieważ proces nie może nawet obudzić się, aby go obsłużyć.

Aby wymusić zabicie procesu, który nie reaguje na sygnały, musisz wysłać SIGKILLsygnał, czasami określany jako kill -9ponieważ 9jest wartością liczbową SIGKILLstałej. Z wiersza poleceń możesz użyć kill -KILL <pid>(lub kill -9 <pid>w skrócie), aby wysłać a SIGKILLi natychmiast zatrzymać proces.

W systemie Windows nie masz systemu Unix sygnałów procesowych, ale możesz wymusić zakończenie działającego procesu za pomocą TerminateProcessfunkcji. Interaktywnie najłatwiej to zrobić, otwierając Menedżera zadań, znajdując python.exeproces odpowiadający Twojemu programowi i klikając przycisk „Zakończ proces”. Możesz również użyć taskkillpolecenia do podobnych celów.


34
  • Aby zatrzymać skrypt Pythona, po prostu naciśnij Ctrl + C.
  • W skrypcie exit()możesz to zrobić.
  • Możesz to zrobić w interaktywnym skrypcie, po prostu wyjdź.
  • Możesz użyć pkill -f name-of-the-python-script.

1
Ostatnia opcja jest szczególnie przydatna, gdy uruchamiasz skrypt w trybie odłączonym, np.python script.py&
richar8086

26

Ctrl-Break jest potężniejszy niż Ctrl-C


4
Jak Daniel Pryden wyjaśnia w swojej odpowiedzi, klawisz Break na klawiaturze może być również oznaczony jako Pause, dla tych, którzy byli zdezorientowani, jak ja. :)
JakeStrang

26

Aby zatrzymać działający program, użyj Ctrl+, Caby zakończyć proces.

Aby obsłużyć to programowo w Pythonie, zaimportuj sysmoduł i użyj sys.exit()miejsca, w którym chcesz zakończyć program.

import sys
sys.exit()

19

Aby zatrzymać skrypt Pythona za pomocą klawiatury: Ctrl+C

Aby zatrzymać to za pomocą kodu (zadziałało to dla mnie w Pythonie 3):

import os
os._exit(0)

możesz także użyć:

import sys
sys.exit()

lub:

exit()

lub:

raise SystemExit

4

Ctrl + Z powinno to zrobić, jeśli zostaniesz złapany w powłoce Pythona. Należy pamiętać, że instancje skryptu mogą nadal działać w tle, więc pod Linuksem musisz zabić odpowiedni proces.


jest to przydatne podczas uruchamiania (wielu) równoległych procesów, a CTRL-C po prostu nie zabije ich wszystkich. Po CTRL-Z możesz sprawdzić jobslub pswtedy kill 8923754lub jakikolwiek identyfikator zadania / identyfikator procesu, który musisz zabić
Paul

3

Kiedy mam skrypt Pythona działający na terminalu Linux, CTRL + \ działa. (nie CRTL + C ani D)


3

Control+ Ddziała u mnie w systemie Windows 10. exit()Działa też umieszczanie na końcu.


3

exit () zabije jądro, jeśli jesteś w Jupyter Notebook, więc nie jest to dobry pomysł. raisepolecenie zatrzyma program.


2

możesz także użyć, Activity Monitoraby zatrzymać proces py



0

Naciśnij Ctrl+ Alt+, Deletea pojawi się Menedżer zadań. Znajdź uruchomione polecenie Pythona, kliknij je prawym przyciskiem myszy i kliknij Zatrzymaj lub Zabij.


0

Jeśli pracujesz ze Spyderem, użyj CTRL +. (DOT) i zrestartujesz jądro, a także zatrzymasz program.


0

Rozwiązanie Windows: Control + C.

Rozwiązanie Macbook: Control (^) + C.

Innym sposobem jest otwarcie terminala, wpisanie top, zapisanie PIDprocesu, który chcesz zabić, a następnie wpisanie na terminalu:kill -9 <pid>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.