Kann ich den Exitstatus von selves process in at_exit block bestimmen?ruby at_exit exit status
at_exit do
if this_process_status.success?
print 'Success'
else
print 'Failure'
end
end
Kann ich den Exitstatus von selves process in at_exit block bestimmen?ruby at_exit exit status
at_exit do
if this_process_status.success?
print 'Success'
else
print 'Failure'
end
end
mit Idee von 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
Obwohl die Dokumentation zu diesem Thema wirklich dünn ist, $! wird als die letzte auftretende Ausnahme festgelegt, und nach einem Aufruf von exit() ist dies eine SystemExit-Ausnahme. die beiden zusammen setzen Sie diese:
at_exit do
if ($!.success?)
print 'Success'
else
print 'Failure'
end
end
Das wird der Fall sein, wenn nur Exit aufgerufen wird. Sicher kann ich testen, ob $! ist nil oder ist SystemExit, die auf Erfolg antwortet? Aber ist es möglich, Process :: Status-Objekt zu erhalten, oder es ist nicht für den oberen Prozess erstellt? – tig
mit Ihrer Idee habe ich Antwort und Posted aber ich weiß nicht, welche Antwort ist besser zu markieren - Ihre oder meine? – tig
Was für Sie funktioniert. Wusste nicht, dass du deine eigene Frage "beantworten" könntest, aber okay. – tadman
nur meine meinung wäre, tadman anstelle von sich selbst den "check" zu geben/zucken. –
Ich denke, dass die vollste Antwort überprüft werden sollte. Check ist am nützlichsten für andere Benutzer, die nach Antworten suchen und ich denke nicht, dass sich irgendetwas für mich und Tadman ändern wird, egal welche Antwort ich überprüfen werde. – tig
Ich denke, mit 'at_exit' ist das ok für kleine Skripte. Bei größeren Anwendungen sollten Sie 'exit' (oder Ihre eigene Methode zum Behandeln von Exits aufrufen) an den beabsichtigten Exitpunkten verwenden und Fehler, Ausnahmen und Signale explizit behandeln. – Kelvin