¿Cómo detener / interrumpir la ejecución de un script de Python?

104

¡Escribí un programa en IDLE para tokenizar archivos de texto y comienza a tokenizar 349 archivos de texto! ¿Cómo puedo detenerlo? ¿Cómo puedo detener un programa Python en ejecución?

MACEE
fuente
5
ctrl+cdebería matarlo. Alternativamente, kill -9es
xbonez
1
Muchas respuestas aquí son específicas de la plataforma. Busque su plataforma (Windows, Linux, Mac, ¿algo más?)
tripleee

Respuestas:

60

Para detener su programa, simplemente presione Control + C.

cristiano
fuente
24
Este método funcionó en mi computadora portátil con Windows, pero en mi escritorio Linux, se mostró ^Cen la terminal y el monitor del sistema mostró que Python todavía está usando mucha CPU ...
user3768495
¿Es posible reanudar el script después de detenerlo?
Gathide
10
@Gathide Si desea pausar el proceso y ponerlo en segundo plano, presione Ctrl + Z(al menos en Linux). Luego, si desea eliminarlo, ejecute kill %ndonde "n" es el número que obtuvo junto a "Detenido" cuando presionó Ctrl + Z. Si desea reanudarlo, ejecute fg.
cluxter
No funciona si tiene una cláusula general except: en el programa. El excepto: detecta la interrupción, hace algo (o no) y luego el programa continúa alegremente.
DragonLord
117

También puede hacerlo si usa la exit()función en su código. Más idealmente, puede hacerlo sys.exit(). sys.exit()que podría terminar Python incluso si está ejecutando cosas en paralelo a través del multiprocessingpaquete.

Nota: Para utilizar el sys.exit(), debe importarlo:import sys

Amir
fuente
8
Nota: Podría encontrar ejemplos en los que sys.exit(1)no detiene el proceso. Básicamente tengo varios subprocesos y cada uno de ellos se bloquea en procesos externos iniciados por Popen. Necesito una opción nuclear para eliminar todos los subprocesos creados por el proceso de Python, así como el proceso de Python en sí. No encontré hasta ahora.
Dici
sys.exit () no mata el proceso, pero genera la excepción SystemSalir que no detiene la ejecución al cerrar el programa
c24b
37

Si su programa se ejecuta en una consola interactiva, al presionar CTRL+ se Cgenerará una KeyboardInterruptexcepción en el hilo principal.

Si su programa Python no lo detecta, KeyboardInterrupthará que Python salga. Sin embargo, un except KeyboardInterrupt:bloque, o algo así como un simple except:, evitará que este mecanismo detenga la ejecución del script.

A veces, si KeyboardInterruptno funciona, puede enviar una SIGBREAKseñal en su lugar; en Windows, el intérprete puede manejar CTRL+ Pause/Breaksin generar una KeyboardInterruptexcepción capturable .

Sin embargo, estos mecanismos solo funcionan principalmente si el intérprete de Python se está ejecutando y responde a los eventos del sistema operativo. Si el intérprete de Python no responde por alguna razón, la forma más efectiva es terminar todo el proceso del sistema operativo que está ejecutando el intérprete. El mecanismo para esto varía según el sistema operativo.

En un entorno de shell de estilo Unix, puede presionar CTRL+ Zpara suspender cualquier proceso que esté controlando actualmente la consola. Una vez que recupere el indicador de shell, puede usar jobspara enumerar los trabajos suspendidos y puede eliminar el primer trabajo suspendido con kill %1. (Si desea que se vuelva a ejecutar, puede continuar el trabajo en primer plano usando fg %1; lea el manual de su shell sobre control de trabajos para obtener más información).

Alternativamente, en un entorno Unix o similar a Unix, puede encontrar el PID (identificador de proceso) del proceso Python y eliminarlo por PID. Use algo como ps aux | grep pythonpara encontrar qué procesos de Python se están ejecutando y luego use kill <pid>para enviar una SIGTERMseñal.

El killcomando en Unix envía SIGTERMpor defecto, y un programa Python puede instalar un manejador de señales para SIGTERMusar el signalmódulo. En teoría, cualquier controlador de señales de SIGTERMdebería cerrar el proceso correctamente. Pero a veces, si el proceso está bloqueado (por ejemplo, bloqueado en un estado de suspensión de E / S ininterrumpida), una SIGTERMseñal no tiene ningún efecto porque el proceso ni siquiera puede despertarse para manejarlo.

Para matar a la fuerza un proceso que no responde a las señales, debe enviar la SIGKILLseñal, a veces denominada kill -9porque 9es el valor numérico de la SIGKILLconstante. Desde la línea de comando, puede usar kill -KILL <pid>(o kill -9 <pid>para abreviar) para enviar SIGKILLy detener la ejecución del proceso inmediatamente.

En Windows, no tiene el sistema Unix de señales de proceso, pero puede terminar forzosamente un proceso en ejecución utilizando la TerminateProcessfunción. De forma interactiva, la forma más sencilla de hacerlo es abrir el Administrador de tareas, encontrar el python.exeproceso que corresponde a su programa y hacer clic en el botón "Finalizar proceso". También puede usar el taskkillcomando para propósitos similares.

Daniel Pryden
fuente
31
  • Para detener un script de Python, simplemente presione Ctrl + C.
  • Dentro de un script con exit(), puedes hacerlo.
  • Puede hacerlo en un script interactivo con solo salir.
  • Puede utilizar pkill -f name-of-the-python-script.
wpp
fuente
La última opción es especialmente útil cuando ejecuta el script en un modo separado, por ejemplopython script.py&
richar8086
26

Ctrl-Break es más poderoso que Ctrl-C

Scott P.
fuente
4
Como aclara Daniel Pryden en su respuesta, la tecla Break en el teclado también podría etiquetarse Pause, para aquellos que estaban confundidos como yo. :)
JakeStrang
25

Para detener un programa en ejecución, use Ctrl+ Cpara finalizar el proceso.

Para manejarlo programáticamente en Python, importe el sysmódulo y utilícelo sys.exit()donde desee terminar el programa.

import sys
sys.exit()
Chandella07
fuente
17

Para detener un script de Python usando el teclado: Ctrl+C

Para detenerlo usando código (esto me ha funcionado en Python 3):

import os
os._exit(0)

también puedes usar:

import sys
sys.exit()

o:

exit()

o:

raise SystemExit
Firzok Nadeem
fuente
4

Ctrl + Z debería hacerlo, si está atrapado en el caparazón de Python. Tenga en cuenta que las instancias del script podrían continuar ejecutándose en segundo plano, por lo que en Linux debe eliminar el proceso correspondiente.

Juke
fuente
esto es útil cuando se ejecutan (muchos) procesos paralelos y CTRL-C simplemente no los matará a todos. Después de CTRL-Z, puede verificar jobso psluego kill 8923754o cualquier ID de trabajo / ID de proceso que necesite eliminar
Paul
3

Cuando tengo un script de Python ejecutándose en una terminal de Linux, CTRL + \ funciona. (no CRTL + C o D)

Stefun06
fuente
3

Control+ Dfunciona para mí en Windows 10. Además, poner exit()al final también funciona.

chess_lover_6
fuente
3

exit () matará el Kernel si está en Jupyter Notebook, por lo que no es una buena idea. raiseEl comando detendrá el programa.

Chadee Fouad
fuente
2

también puede usar Activity Monitorpara detener el proceso py

Dennis
fuente
1

Para detener su programa, simplemente presione CTRL+D

o exit().

Vivek Parmar
fuente
0

Presione Ctrl+ Alt+ Deletey aparecerá el Administrador de tareas. Busque el comando de Python en ejecución, haga clic derecho sobre él y luego haga clic en Detener o Eliminar.

Andrew Hyder
fuente
0

Si está trabajando con Spyder, use CTRL +. (DOT) y reiniciará el kernel, también detendrá el programa.

l1den
fuente
0

Solución de Windows: Control + C.

Solución Macbook: Control (^) + C.

Otra forma es abrir una terminal, escribir top, escribir PIDel proceso que le gustaría matar y luego escribir en la terminal:kill -9 <pid>

seralouk
fuente