29 votos

Evitar el mensaje "<aplicación> se cierra inesperadamente" al salir.

Yo mato los procesos de Python con SIGQUIT pulsando Ctrl\ a veces (normalmente los míos que se portan mal). ¿Puedo evitar el mensaje "Python quit unexpectedly"? Sé que puedo pulsar escape, así que no es tan grave.

"Python quit unexpectedly." dialog

2 votos

¿Por qué no usas control-C en su lugar? SIGTERM no provoca el mensaje.

1 votos

@ughoavgfhw Estoy trabajando en un REPL que a veces pone la terminal en modo raw, por lo que mi programa recibe el ctrl-c como una pulsación de tecla en su lugar. También a veces tengo problemas de hilos, de tal manera que hilos que deberían morir no lo hacen, y en Python ctrl-c parece que sólo mata el hilo principal. (Sé que debería usar t.daemon = True Por diversas razones, a veces necesito usar ctrl- \.

0 votos

Si se trata de su código, entonces un problema de desarrollo que su código tiene que hacer frente a las señales

29voto

Fuzzy Purple Monkey Puntos 702

Si no quieres ver nunca los cuadros de diálogo de los informes de accidentes, hay una preferencia para desactivarlos:

defaults write com.apple.CrashReporter DialogType none

Cierre la sesión y vuelva a entrar para aplicar los cambios.

2 votos

En mi caso no fue necesario cerrar la sesión.

7 votos

¿Hay alguna manera de hacer el defaults write com.apple.CrashReporter DialogType none selectivamente sólo para una aplicación en particular?

0 votos

Para mí este comportamiento no cambió (después de introducir el comando) hasta el cierre de sesión y el inicio de sesión.

16voto

Tim Baverstock Puntos 31

También puede hacer que el mensaje aparezca como una notificación en su lugar:

defaults write com.apple.CrashReporter UseUNC 1

2 votos

Como éste. En MacOS Sierra, un banner de notificación se desliza en la parte superior derecha de la pantalla y desaparece por sí solo, pero si se hace clic en él, se obtiene la ventana de volcado de fallos completa original. Así que esto es perfecto. Mucho menos molesto pero deja las opciones abiertas.

3voto

Nip Puntos 362

El comportamiento por defecto al recibir SIGQUIT es volcar el núcleo y salir; el informe de fallos se activa como parte de este proceso.

A partir de la versión 10.5(?), simplemente establecer un manejador de señales para SIGQUIT debería ser suficiente para evitar el reportero de accidentes; probablemente querrá que el manejador también llame a exit.

import signal, sys, os

def sigquit_handler(signum, frame):
    print 'SIGQUIT received; exiting'
    sys.exit(os.EX_SOFTWARE)

signal.signal(signal.SIGQUIT, sigquit_handler)

# Do your normal work instead of this
print 'Waiting for a signal...'
signal.pause()

El código anterior fue probado en 10.8.5 contra /usr/bin/python que es 2.7.2.

1 votos

¿Hay alguna manera de hacer el defaults write com.apple.CrashReporter DialogType none selectivamente sólo para una aplicación en particular?

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X