Могу ли я определить статус выхода из процесса в блоке at_exit?ruby at_exit статус выхода
at_exit do
if this_process_status.success?
print 'Success'
else
print 'Failure'
end
end
Могу ли я определить статус выхода из процесса в блоке at_exit?ruby at_exit статус выхода
at_exit do
if this_process_status.success?
print 'Success'
else
print 'Failure'
end
end
используя идею из 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
Хотя документация по этому вопросу действительно тонкая, $! установлено последним исключением, и после вызова exit() это исключение SystemExit. Положив эти два вместе, вы получите это:
at_exit do
if ($!.success?)
print 'Success'
else
print 'Failure'
end
end
Это будет лишь в том случае, если выход будет называться. Конечно, я могу проверить, если $! nil или SystemExit, который отвечает за успех? Но возможно ли получить объект Process :: Status или он не создан для верхнего процесса? – tig
, используя вашу идею, я получил ответ и опубликовал, но я не знаю, какой ответ лучше отметить - ваш или мой? – tig
Что бы ни работало для вас. Не знал, что вы можете «ответить» на свой вопрос, но все в порядке. – tadman
просто мое мнение было бы дать «чек» тадману вместо себя/пожимать плечами. –
Я думаю, что нужно ответить на самый полный ответ. Проверка является наиболее полезной для других пользователей, которые ищут ответ, и я не думаю, что что-то изменится для меня и тадмана, независимо от ответа, который я проверю. – tig
Я думаю, что использование 'at_exit' для этого подходит для небольших скриптов. Для более крупных приложений вы должны использовать 'exit' (или вызывать свой собственный метод для обработки выходов) в предполагаемых точках выхода и явно обрабатывать ошибки, исключения и сигналы. – Kelvin