Mam skrypt Pythona, który używa wątków i sprawia, że wiele żądań HTTP. Wydaje mi się, że podczas odczytywania żądania HTTP (przy użyciu urllib2) blokuje się i nie odpowiada na to, aby zatrzymać program. Czy jest jakiś sposób obejścia tego?Zatrzymywanie python za pomocą ctrl + c
Odpowiedz
W Windows, jedynym pewnym sposobem jest użycie CtrlPrzerwa. Zatrzymuje natychmiast każdy skrypt Pythona!
(Zauważ, że na niektórych klawiaturach, "Break" jest oznaczony jako "pause".)
Działa, dziękuje – jonatron
Co to jest "Przerwa"? Jak mogę to napisać? – u0b34a0f6ae
Powinien być przycisk Pause_Break na klawiaturze – jonatron
Jeśli jest uruchomiony w zastosowaniu powłoki Python Ctrl + Z, inaczej proces python
zlokalizować i zabić go.
'^ Z' ->' [1] + Zatrzymano '->' kill% 1', aby zatrzymać zadanie nr 1 (lub zadanie% 1 tak, jak bash to ujmuje) – u0b34a0f6ae
tak! Ctrl + Z działa dla mnie! –
Warto dodać, że Ctrl + Z po prostu * wstrzymuje * proces. –
Naciśnięcie Ctrl + c podczas gdy program jest uruchomiony pyton spowoduje Pythona podnieść KeyboardInterupt wyjątek. Prawdopodobnie program, który wykonuje wiele żądań HTTP, będzie miał wiele kodów obsługi wyjątków. Jeśli poza blokiem try-except nie określono, które wyjątki powinny zostać przechwycone, przechwyci wszystkie wyjątki, w tym właśnie wywołany KeyboardInterupt. Odpowiednio zakodowany program python będzie korzystał z python exception hierarchy i wychwyci wyjątki, które pochodzą z wyjątku.
#This is the wrong way to do things
try:
#Some stuff might raise an IO exception
except:
#Code that ignores errors
#This is the right way to do things
try:
#Some stuff might raise an IO exception
except Exception:
#This won't catch KeyboardInterupt
Jeśli nie można zmienić kod (lub trzeba zabić program tak, że zmiany wejdą w życie), to można spróbować nacisnąć Ctrl + c szybko. Pierwszy z wyjątków KeyboardInterupt wybije twój program z bloku try i mam nadzieję, że jeden z późniejszych wyjątków KeyboardInterrupt zostanie podniesiony, gdy program znajdzie się poza blokiem try.
To jest świetna odpowiedź, aby umożliwić najczęściej spotykany "break" czyli ctrl + c. – Xerion
Proces przerwań zależy od sprzętu i systemu operacyjnego. Będziesz miał bardzo różne zachowanie w zależności od tego, gdzie uruchamiasz skrypt Pythona. Na przykład na komputerach z systemem Windows mamy Ctrl + C (SIGINT
) i Ctrl + Przerwa (SIGBREAK
).
Więc gdy SIGINT jest obecny we wszystkich systemach i mogą być obsługiwane i złapać sygnał SIGBREAK Windows specyficzny (i może zostać wyłączony w CONFIG.SYS) i jest naprawdę obsługiwane przez BIOS jako wektorów przerwań INT 1Bh, dlatego ten klucz jest znacznie potężniejszy niż jakikolwiek inny. Więc jeśli używasz jakiegoś systemu operacyjnego o smaku * nix, otrzymasz różne wyniki w zależności od implementacji, ponieważ ten sygnał nie jest obecny, ale inne są. W Linuksie można sprawdzić jakie są sygnały do Państwa dyspozycji przez:
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS
11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGPWR 30) SIGUSR1
31) SIGUSR2 32) SIGRTMAX
więc jeśli chcesz złapać CTRL+BREAK
signal w systemie Linux będziesz musiał sprawdzić, co POSIX signal one odwzorowane ten klucz.Najczęściej są mapowania:
CTRL+\ = SIGQUIT
CTRL+D = SIGQUIT
CTRL+C = SIGINT
CTRL+Z = SIGTSTOP
CTRL+BREAK = SIGKILL or SIGTERM or SIGSTOP
W rzeczywistości, wiele więcej funkcji są dostępne pod Linuksem, gdzie klawisz SysRq (Request System) może przyjmować a life of its own ...
Ten post jest stary, ale ja niedawno wpadł na ten sam problem z CTRL+C
, nie kończąc skryptów Pythona na moim Linux
. Użyłem CTRL + \
(SIGQUIT
).
Dziękuję! Zwięzły. –
Chociaż spowoduje to zrzut rdzenia, ale zatrzyma skrypt, dzięki – ospider
na Mac/w Terminalu:
- Pokaż Inspector (kliknij prawym przyciskiem myszy w oknie terminala lub Shell> Pokaż Inspektora)
- kliknij ikonę Ustawienia powyżej "Uruchamianie procesu"
- wybrać z lista opcji w "Grupa procesów sygnałowych" (zabijanie, kończenie, przerywanie itd.).
Ctrl + q natychmiast zatrzyma uruchomiony kod i zamknie wszystkie okna.
na prasach Mac:
"kontrola" + "\"
aby zamknąć proces Pythona dołączony do terminalu.
- 1. Jak zatrzymać serwer WWW tornada za pomocą ctrl + c?
- 2. Uchwyt CTRL-C w module cmd Python
- 3. Zatrzymywanie równoległego zadania java za pomocą ant
- 4. Jak zgrabnie zamknąć procesory za pomocą Ctrl + C?
- 5. C# Zatrzymywanie nici po wyjątek
- 6. CTRL + C nie przerywa połączenia z biblioteką współdzieloną za pomocą CTYPES w Pythonie
- 7. Zatrzymywanie nagwintowanej pętli serwera za pomocą Boost :: Asio
- 8. Przekazywanie wskaźnika C za pomocą interfejsu API Python/C
- 9. Programowe wyłączanie Menedżera zadań za pomocą C#
- 10. Ctrl-C nie działa z PyQt
- 11. Jak zatrzymać aplikację kolb bez użycia ctrl-c
- 12. AVD Orientacja ekranu niezmienna za pomocą klawiszy CTRL + F11 lub CTRL + F12
- 13. Jak włączyć wklejanie w polu tekstowym za pomocą Ctrl + v
- 14. Czy mogę wywołać wyjście Python 2.5 na Ctrl-D w Windows zamiast z Ctrl-Z?
- 15. Jak wyłączyć CTRL-C podczas skanowania scp?
- 16. Wykrywanie CTRL + C w node.js
- 17. svg diagramy za pomocą python
- 18. Umożliwianie Ctrl-C przerywania pythonowego rozszerzenia C
- 19. Jak mogę złapać zdarzenie ctrl-c? (C++)
- 20. Jak powiązać Ctrl +/w python tkinter?
- 21. Kombinacje klawiszy Python (klawisz Ctrl + Shift + klawisz)
- 22. W jaki sposób jest przydzielana dynamicznie przydzielona przestrzeń, gdy program jest przerywany za pomocą Ctrl-C?
- 23. Wyślij Ctrl-C do zdalnych procesów uruchomionych za pomocą podprocesu.Popen i ssh
- 24. Jak wyłączyć Ctrl C/V za pomocą javascript dla przeglądarek Internet Explorer i Firefox
- 25. Programowanie wyższego rzędu za pomocą Boost :: Python
- 26. Python - Sprawdzanie poprawności za pomocą wielu schematów za pomocą lxml
- 27. Algorytm najkrótszej ścieżki za pomocą słowników [Python]
- 28. upgade wersja python za pomocą pip
- 29. Osadzony: C Kodowanie przerwań Ctrl-C w terminalu u-boot
- 30. Zatrzymywanie IntentService z działania
Nie wiem dlaczego, ale przynajmniej na OS X, użycie Control + Backslash powoduje, że kończy się i pojawia się okno "python crashed" ... dziwne. Niezbyt użyteczne informacje, a więc jest to komentarz! – micmoo
Właściwie to działa na wszystkich aplikacjach w Terminalu ... – micmoo
David Beazley opisał, jak przerywanie Ctrl/C może przekształcić skrypt Python z wielowątkowym gwintem w procesor CPU. Jest to wzmiankowane tutaj (http://stackoverflow.com/questions/990102/python-global-interpreter-lock-gil-workaround-on-multi-core-systems-using-tasks) z linkiem do mowy Beazleya. –