2009-07-17 6 views
11

¿Puedo determinar el estado de salida del proceso de yodo en el bloque at_exit?ruby ​​at_exit estado de salida

at_exit do 
    if this_process_status.success? 
    print 'Success' 
    else 
    print 'Failure' 
    end 
end 

Respuesta

14

utilizando idea de tadman

at_exit do 
    if $!.nil? || $!.is_a?(SystemExit) && $!.success? 
    print 'success' 
    else 
    code = $!.is_a?(SystemExit) ? $!.status : 1 
    print "failure with code #{code}" 
    end 
end 
+2

simplemente mi opinión sería dar el "cheque" a tadman en lugar de a ti mismo/encogerse de hombros. –

+1

Creo que se debe verificar la respuesta más completa. El control es más útil para otros usuarios que buscan una respuesta y no creo que nada cambie para mí y para tadman, sea cual sea la respuesta que verifique. – tig

+0

Creo que usar 'at_exit' para esto está bien para scripts pequeños. Para aplicaciones más grandes, debe usar 'exit' (o llamar a su propio método para manejar las salidas) en los puntos de salida previstos, y manejar los errores, las excepciones y las señales de forma explícita. – Kelvin

17

Aunque la documentación sobre esto es realmente delgada, $! se establece como la última excepción que se produce, y después de una llamada a exit() esta es una excepción SystemExit. Poniendo los dos juntos que presentamos lo siguiente:

at_exit do 
    if ($!.success?) 
    print 'Success' 
    else 
    print 'Failure' 
    end 
end 
+0

Ese será el caso sólo si la salida se llamará. ¡Seguramente puedo ser probado si $! ¿Es nil o es SystemExit que responde verdadero al éxito? ¿Pero es posible obtener el objeto Process :: Status o no se creó para el proceso superior? – tig

+0

usando su idea Recibí una respuesta y la publiqué, pero no sé cuál es la mejor, ¿la suya o la mía? – tig

+0

Lo que sea que funcione para usted. No sabía que podía "responder" a su propia pregunta, pero está bien. – tadman

Cuestiones relacionadas